一维数组:
int a[3];
名称 | 数据类型 | 值(举例) | 意义 |
a | int * | 0x0300 | 数组的 首元素的首地址 |
&a[0] | int * | 0x0300 | 数组的 首元素的首地址 |
&a | int (*)[3] | 0x0300 | 整个数组的的首地址 |
(int)a | int | 0x0300 | 强制类型转换 |
以一个面试题举例分析一下他们的区别. 直接看图. 这道题目的答案不唯一,要首先区别大端和小端模式. 可以看看我前几天写的一篇文章,
int a[] ={1,2,3,4,5};
int *ptr1 =(int *)((int)a + 1);
int *ptr2 =(int *)(&a + 1); //&a整个数组的的首地址 &a + 1 ( &a[0] +sizeof(a)) 相当于 a[5]
printf("%#x\n",*ptr1); // 0x02000000
printf("%#x\n",ptr2[-1]); // ptr2[-1] *(ptr2 – 1 ) 5