第一种:例如 printf("%p\n",arr),它所打印出来的值的意义是代表第一个数组元素对应的地址。
例如printf("%p\n",arr[0]);他所打印出来的值的意义也是代表第一个数组元素对应的地址。
例如printf("%p\n",&arr),他所打印出来的值的意义代表的是这个数组所在系统空间的地址。
这三种输出结果最终打印出的结果可能是一样的,但是它们所代表的意思不完全相同,第一种和第二种都代表的是输出数组首元素的地址,而第三种代表的是 输出数组位于空间的地址。
如果还不能清楚的理解的话,可以运行以下代码:
源代码:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0]+1);
printf("%p\n", &arr);
printf("%p\n", &arr+1);
}
结果:
00AFFE84
00AFFE88
00AFFE84
00AFFE88
00AFFE84
00AFFEAC
前面两个和中间的两个数值相同,表示的是先输出第一个首元素的地址,然后再输出第二个元素的地址,而后两个的意思就是先输出这个数组的地址,然后在输出这个数组结束后,下一个数组起点的地址。这便是这三者的区别。