一维数组:
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