我知道一个数组的名称代表该数组第一个条目的地址,
但是以下代码对我来说没有意义:
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的情况不同。
为什么会出现这些差异?