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