今天主要谈谈数组和取地址数组的区别
以int arr[10];为例
arr是数组名,它就是首元素地址,那&arr是什么?
我们先看一段代码:
#include <stdio.h> int main() { int arr[10] = {0}; printf("%p\n", arr); printf("%p\n", &arr); return 0; }
运行结果如下:
看起来并没有什么不一样,但是这两个还是有区别的,我们再来看一段代码:
#include <stdio.h> int main() { int arr[10] = { 0 }; printf("arr = %p\n", arr); printf("&arr= %p\n", &arr); printf("arr+1 = %p\n", arr+1); printf("&arr+1= %p\n", &arr+1); return 0; }
但是我们在给两个指针加一的时候,我们发现地址不相同了,根据计算我们发现,&arr+1刚好是整个数组的下一个字节,也就是说&arr是整个数组地址,而arr只是首元素地址。