一、什么是数组名
数组名的值是指向数组首元素地址的指针常量。
数组名不是指针,但大多数编译器都会把他当作指向数组首元素地址的指针来看待。
有两种例外,数组名会被当成整个数组。
1、sizeof(arr);//这里计算的是整个数组所占的空间大小。
2、&arr//运算结果为**数组的地址**。
注意:这里虽然arr计算的结果和&arr的结果一样,但arr是数组首元素的地址,&arr是数组的地址,值一样但意义不一样。
二、arr和&arr的区别
取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。
我们用%p打印他们的地址来观察。
代码如下:
通过上图我们可以看到arr加1只移动了4个字节,相当于指向了下一个数组元素,而&arr加1移动了12个字节,正好是arr数组的大小,相当于指向了下一个数组。