C语言中指针与数组的关系
int *numbers[4] ={1,2,3,4};
int *p = (int *)(&numbers +1);
NSLog(@"%d", *(p-1));//结果 4
-
为什么结果是 4?
- 1.&numbers是指向数组的整个指针,并不是指向数组的第0个元素地址,(顺便复习一下数组的指针和数组的第0个元素,是相同的地址)
- 2.所以&numbers的跨度是整个数组,也就是说numbers数组的跨度为0-16位(int 占用4个字符),所以输出的就是4
指针p的加减法运算
- 指针p + N
- p里面存储的地址值 + N * 指针所指向类型的占用字节数
- 指针p - N
- p里面存储的地址值 - N * 指针所指向类型的占用字节数
数组名
- 存储的是
数组首元素的地址
- 等价于:一个指向
数组首元素的指针
-
数组名 + 1 的跨度:数组首元素的占用字节数
其他结论
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。