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
的跨度:数组首元素
的占用字节数
其他结论
-
&num + 1
的跨度:num
的占用字节数