c语言深度剖析笔记5
2016-10-21 11:17
330 查看
2016.8.27 DAGE
复习内容:c语言深度剖析笔记5
复习内容:c语言深度剖析笔记5
a.指针&数组
1.指针
int *p = NULL; //表示把这个指针置为0,NULL在C语言里面被宏定义为0,不是指针指向的内容*p为0,而是这个地址p为0 int *p = (int *)0x123456; //如果要修改某个地址的内容,将这个地址赋值给一个指针时要强制转换类型,也可以*(int *)0x123456 = 245; 指针就是表示一个地址 一个指针变量p,p[4]这个操作会被解析成:先取出 p 里存储的地址值,然后加上中括号中 4 个元素的偏移量,计算出新的地址,然后从新的地址中取出值。也就是说以下标的形式访问在本质上与以指针的形式访问没有区别,只是写法上不同罢了。 就类似于*(p+4) 注意偏移的是元素而不是byte char *p = "abcdef";这儿的字符串大小为7byte,放在内存的静态区,不能被改变 此时的p保存的是这个字符串的首地址*p = 'a';
2.数组
int a[5]; 求sizeof(a[5])也会求出为4, sizeof 是关键字不是函数。函数求值是在运行的时候,而关键字 sizeof 求值是在编译的时候。 虽然并不存在a[5]这个元素,但是这里也并没有去真正访问 a[5],而是仅仅根据数组元素的类型来确定其值。所以这里使用 a[5]并不会出错。 a+1和&a+1 a 是数组首元素的首地址,也就是 a[0]的首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即 a[1]的首地址,&a+1 是下一个数组的首地址。 即&a+1是a[MAX]的首地址
3.区别
访问数据: 指针:间接访问数据, 首先取得指针变量 p 的内容, 把它作为地址,然后从这个地址提取数据或向这个地址写入数据。 指针可以以指针的形式访问*(p+i); 也可以以下标的形式访问 p[i]。 但其本质都是先取 p 的内容然后加上i*sizeof(类型)个 byte 作为数据的真正地址。 数组:直接访问数据,数组名 a 是整个数组的名字,数组内每个元素并没有名字。 只能通过“具名+匿名”的方式来访问其某个元素,不能把数组当一个整体来进行读写操作。 数组可以以指针的形式访问*(a+i);也可以以下标的形式访问 a[i]。 但其本质都是 a 所代表的数组首元素的首地址加上 i*sizeof(类型)个 byte 作为数据的真正地址。
4.指针数组和数组指针
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。 int *p[4]; 一个指针数组,因为[]优先级高于*,先定义为一个有4个元素的数组,int *修饰的是这个数组元素的类型 int (*p)[4];一个数组指针,先定义为了一个指针,指针指向一个4个int数据的数组
相关文章推荐
- C语言深度剖析笔记(1)
- 《C语言深度剖析》学习笔记----C语言中的符号
- C语言深度剖析——个人笔记
- C语言深度剖析学习笔记-指针、数组、内存、函数
- 一无所有:阅读陈正冲《C语言深度剖析 第二版》笔记 1(声明)
- C语言深度剖析学习笔记-符号
- c语言深度剖析笔记4
- C语言深度剖析--读书笔记1_定义和声明
- C语言深度剖析笔记(2)
- C语言深度剖析笔记(七)
- C语言深度剖析笔记(指针和数组)
- 20110907C语言深度剖析笔记
- C语言深度剖析笔记(六)
- c语言深度剖析之学习笔记(二)------------符号
- <<C语言深度剖析>>学习笔记之一:C语言中32个关键字
- C语言深度剖析学习笔记
- [学习笔记]C语言深度剖析
- C语言深度剖析学习笔记-预处理
- 读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号
- 读c语言深度剖析 -- 闲谈const(3)