我正在探索C和C++中的指针概念.我已经阅读了很多关于它的文章,但我仍然有些疑惑.期待你们中的任何人都能清除它们.
所以这是我的问题:
声明的单维数组如下:
int array[5] = {1, 2, 3, 4, 5};
现在我打印的值低于:
printf("array--->%u", array); // Output: 3199709072 printf("&array--->%u", &array); // Output: 3199709072 printf("*array--->%d", *array); // Output: 1 printf("*&array--->%d", *&array); // Output: 3199709072
前三个输出与我的预期相同,但我不理解第四个.
为什么要打印数组第一个元素的地址?
我正在使用*&array
表达式,这意味着我明确指定我想要&array
地址的值,但它仍然打印第一个元素的地址.
有任何想法吗??
当一元*
和一元&
混在一起时,它们会使对方效果无效.*&array
相当于array
.由于数组在作为参数传递给函数时衰减指向其第一个元素,因此array
将给出数组的第一个元素的地址array
.
换句话说,表达式*&array
将被解析为(* (&array) )
; 检索数组的地址,array
然后取消引用它.因为&array
是一个数组的地址,所以取消引用它将返回数组本身,但根据规则,解除引用的数组将衰减指向其第一个元素,它将使表达式*&array
等效于array
.
注意:使用%p
说明符打印地址.喜欢
printf("array--->%p", (void *)array);
否则,使用错误的说明符将调用未定义的行为.