C语言 ---- 指针 iOS学习-----细碎知识点总结
内存的访问形式:1、直接访问:通过变量名进行访问。2、间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间。
指针---
// 定义一个整形指针变量,用来存储num1在内存中的地址
int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0
printf("%p\n", p); // 输出指针变量的值,使用"%p"
printf("&num1 = %p\n", &num1); // 取址运算符,取得变量所在的内存地址
p = &num1; // 给整形指针变量重新赋值
printf("p = %p\n", p);
printf("*p = %d\n", *p); // "*"取值运算符,取出地址里面存储的数据
// 当我们定义指针变量的时候,"*"只是起一个标识作用,告诉我们这个变量是一个指针变量。
// 当我们使用指针变量的时候,"*"表示的是从当前地址里面取出存储的数据。
// 指针的算术运算,只有加和减
int num1 = 100;
int num2 = 200;
int *p = &num2;
printf("*p = %d\n", *p);
printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指针向高位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节, char *p1移动1个字节)
printf("&num1 = %p\n", &num1);
printf("&num2 = %p\n", &num2);
printf("p = %p\n", p);
printf("p + 1 = %p\n", p + 1);
printf("p - 1 = %p\n", p - 1); // p - 1是指针向低位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节, char *p1移动1个字节)
printf("++p = %p\n", ++p);
// 指针和数组
int array[3] = {1, 3, 5};
printf("array = %p\n", array); // 数组名就是数组元素的首地址
printf("&array[0] = %p\n", &array[0]);
int *p = array;
printf("%d\n", *p);
printf("%d\n", *(p + 1));
printf("%d\n", *p + 1);
*(p + 2) = 6;
p[1] = 10; // 指针可以当做数组名来使用
// 指针和数组的区别:所占空间不同:指针所占的空间只喝操作系统有关,数组占用的空间等于数组的元素个数*数组元素类型所占的字节数。
// 数组名是常量地址,不能重指向。指针可以进行重指向。
int *p1 = NULL;
// array = p1;
p = p1;
// 指针和字符串
char str[10] = "iPhone"; // 把常量区的字符串"iPhone"拷贝到了栈区,所以可以进行更改
char *p = str;
printf("%s\n", str);
printf("%s\n", p);
*(p + 1) = 'X'; // 使用字符指针操作单个字符
printf("%s\n", p); // 使用字符指针操作字符串
printf("%c\n", p[3]);
printf("%c\n", *(p + 3));
printf("%s\n", p + 2);
char *str1 = "iPhone"; // 栈区的指针str1指向常量区的某一块区域
printf("str1 = %s\n", str1);
// *(str1 + 1) = 'X'; // 常量不能修改
printf("str = %p\n", str);
printf("str1 = %p\n", str1);
// 指针数组
char *strings[3] = {"iOS", "iMac", "iPad"};
printf("%s\n", *strings); // 取出数组中的第一个元素(数组里面的元素是地址)
printf("%s\n", *(strings + 1));
printf("%s\n", *(strings + 2));
printf("%c\n", *(*strings));
printf("%c\n", *(*strings + 1));
printf("\n\n");
printf("%p\n", strings);
printf("%p\n", strings + 1);
printf("%p\n", strings + 2);
C语言 ---- 指针 iOS学习-----细碎知识点总结的更多相关文章
- C语言 ---- 数组 iOS学习-----细碎知识点总结
#pragma mark - 数组:用来存放同一数据类型的数据 // 数组的定义:类型说明符 数组名[常量表达式] = {值1, 值2, 值3...}; // 定义一个float类型的数组,用来 ...
- C语言 ---- 循环分支 iOS学习-----细碎知识点总结
#import <Foundation/Foundation.h> // #import是OC种的导入头文件或者是系统框架的指令 // 定义了一个Season枚举类型enum Seaso ...
- C语言 ---- 函数 结构体 iOS学习-----细碎知识点总结
函数的定义 返回值类型 函数名(形式参数列表) { 函数的实现 } 函数不允许嵌套定义 如果函数的定义在主调函数之后,那么要进行提前声明才能使用. // 匿名结构体,结构 ...
- C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结
// 导入头文件(stdio.h),标准输入输出的头文件,#include <stdio.h> // 程序的入口int main(int argc, const char * argv[] ...
- OC ---- 字典集合 iOS学习-----细碎知识点总结
实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:", @"age" ...
- OC ---- 字符串 数组 iOS学习-----细碎知识点总结
NSString *urlString = [NSString stringWithFormat:@"http://www.apple.com"]; // 获取字符串 ...
- 2017.11.14 C语言---指针的学习
第八章 善于利用指针 (1)指针是什么 1.内存区每一个字节都有一个编号,这就是"地址".地址形象化的被称为"指针".它能通过以它为地址的内存单元.地址指向(* ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
随机推荐
- ASP.NET知识总结(3.HTTP协议详解)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- linux 内核与用户空间通信之netlink使用方法
转自:http://blog.csdn.net/haomcu/article/details/7371835 Linux中的进程间通信机制源自于Unix平台上的进程通信机制.Unix的两大分支AT&a ...
- 宿主机ping不通虚拟机cenos7
参考网址1:http://zhidao.baidu.com/link?url=2v3NXGyzPT-XTYwon8PesZLnMg02Ako6nDub3vJiJt4miSmkOA-04xLUqfu9s ...
- 疑问:line-height对非文字行内块的影响
line-height:对子元素是非文字的行内块,表现出来的不是垂直居中.目前还不知道具体细节. 可以看出来两个东西不在一行.老师的解释是line-height对非文字元素解释不一样,但是我没懂细节. ...
- python 爬虫(一)
1. 一次简单的网页访问 urllib 是一个标准的python库(意味着不需要安装任何附件的东西来运行这个demo),包含了通过网络请求数据的方法,处理cookies,甚至更改metadata比如h ...
- [poj2337]求字典序最小欧拉回路
注意:找出一条欧拉回路,与判定这个图能不能一笔联通...是不同的概念 c++奇怪的编译规则...生不如死啊... string怎么用啊...cincout来救? 可以直接.length()我也是长见识 ...
- html上下结构(上部固定高度,下部平铺)
html页面上下结构: 上部固定,下部平铺 <div id="page_header"></div> <div id="page_conte ...
- 【Oracle】Oracle 序列步长问题
问题: 数据库中客户表的ID 变化为 21\31\41 有序数字,而不是1\2\3 依次增长 [问题原因]: SEQ_CUSTOMNOTEEN 设置了缓存20,每次取20个数,然后一个一个给你,如果中 ...
- CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力枚举,水 1.题意:n*m的数组, ...
- ZeroMQ接口函数之 :zmq_ctx_get - 得到环境上下文的属性
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_get zmq_ctx_get(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_c ...