一维数组:
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
本文深入探讨了一维数组的基本概念及其在内存中的表示形式,并通过具体实例讲解了数组指针运算的区别,适用于初学者及面试备考者。
1万+

被折叠的 条评论
为什么被折叠?



