初学者的问题)数组名称=数组名称的地址?

时间:2019-04-22 16:30:28

标签: c

我知道一个数组的名称代表该数组第一个条目的地址,

但是以下代码对我来说没有意义:

char arr[5] = { 1,2,3,4,5 };
printf("%p %p %p %p", arr, &arr, *&arr, &*arr);

>>>010FF9DC 010FF9DC 010FF9DC 010FF9DC

我猜对于后两个*和&彼此抵消并消失,就像-(-1)=1。(如果我错了,请注意我)

但是为什么前两个打印相同?

再加上

printf("%p %p\n", arr + 1, &arr + 1);
char *p = arr;
printf("%p %p\n", p, &p);

>>>010FF9DD 010FF9E1
>>>010FF9DC 010FF9D0

“ arr + 1”从字面上变为“ arr +1”(可能是“ arr + sizeof(char)”),

但是'&arr + 1'表示'&arr + sizeof(arr)'。

当我声明一个指向arr的新指针时,

p和&p不会得到相同的结果,这与arr和&arr的情况不同。

为什么会出现这些差异?

0 个答案:

没有答案