作者:程姚根,华清远见嵌入式学院讲师。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
int a[5] = {1, 2, 3, 4, 5};
printf("a = %p\n", a); //a = 0x7fff5fbff840
printf("&a = %p\n", &a); //&a = 0x7fff5fbff840
printf("******************\n");
printf("a + 1 = %p\n", a + 1);//a + 1 = 0x7fff5fbff844
printf("a + 2 = %p\n", a + 2);//a + 2 = 0x7fff5fbff848
printf("a + 3 = %p\n", a + 3);//a + 3 = 0x7fff5fbff84c
printf("a + 4 = %p\n", a + 4);//a + 4 = 0x7fff5fbff850
printf("a + 5 = %p\n", a + 5);//a + 5 = 0x7fff5fbff854
printf("&a + 1 = %p\n", &a + 1);//&a + 1 = 0x7fff5fbff854
}
//数组名a,代表着数组的首地址, a + 1,就是数组的下一元素的地址,a 与 a + 1的值正好相差4,为int型变量所占的字节数4; &a 也代表着数组的首地址,&a的值与&a + 1的值相差20,也就是说&a + 1是数组的最后一个元素的下一个元素的地址,即数组名a, 其实就是一个符号,代表数组的首地址和&a[0]相同, &a的值也是数组的首地址,但意义全部相同,&a是取整个数组的地址,那&a + 1 呢就是移动一个数组.