#include <stdio.h>
int main()
{
char arr[3] = {'A', 'B', 'C'};
char *parr = arr;
char(*parr1)[3] = &arr;
char(*parr2)[] = &arr;
/*
arr为数组名指的是数组arr首元素的地址,等价于一个地址常量
&arr为整个数组的地址
因为数组为多个相同类型的数据存放在连续的地址上的数据结构,所以整个数组的地址恰好等价于数组首元素的地址
虽然二者相等,但是在进行指针运算时,有着不同的意义
*/
printf("0x%p 0x%p 0x%p 0x%p 0x%p\n", arr, &arr, parr, parr1, parr2); // output: 0x0061FF11 0x0061FF11 0x0061FF11 0x0061FF11 0x0061FF11
printf("0x%p 0x%p 0x%p\n", arr + 1, parr + 1, parr1 + 1); 0x0061FF12 0x0061FF12 0x0061FF14
/*
error: lvalue required as unary '&' operand
20 | printf("0x%p \n", &(arr + 1));
error: invalid use of array with unspecified bounds
20 | printf("0x%p \n", parr2 + 1);
*/
return 0;
}
知识碎片 ->数组与指针的细节(C中较为重要的部分)
于 2023-04-20 00:17:45 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)