==================以下为例子=====================
#include <stdio.h>
int main(void) {
int a[5] = {1,2,3,4,5};
int *ptr1 = (int *)a; //数组元素a[0]的地址
int *ptr2 = (int *)&a; // 数组的首地址
int *ptr = (int *)(&a+1);//&a代表整个数组的地址
printf("(int *)a = %d\n",*ptr1);
printf("(int *)&a = %d\n",*ptr2);
printf("*(a+1) = %d\n",*(a+1));
printf("((int *)(&a+1))-1 = %d\n",*(ptr-1));
return 0;
}
==================以下为输出=====================
//输出为:
(int *)a = 1
(int *)&a = 1
*(a+1) = 2
((int *)(&a+1))-1 = 5
Program ended with exit code: 0
==================以下为解释=====================
a,&a 的值是一样的,但意思不一样;
a 是数组首元素的首地址,也就是a[0]的首地址;
&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址;
&a+1 是下一个数组的首地址。
网友评论