当前位置:  开发笔记 > 编程语言 > 正文

C和C++中的指针

如何解决《C和C++中的指针》经验,为你挑选了1个好方法。

我正在探索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地址的值,但它仍然打印第一个元素的地址.

有任何想法吗??



1> haccks..:

当一元*和一元&混在一起时,它们会使对方效果无效.*&array相当于array.由于数组在作为参数传递给函数时衰减指向其第一个元素,因此array将给出数组的第一个元素的地址array.

换句话说,表达式*&array将被解析为(* (&array) ); 检索数组的地址,array然后取消引用它.因为&array是一个数组的地址,所以取消引用它将返回数组本身,但根据规则,解除引用的数组将衰减指向其第一个元素,它将使表达式*&array等效于array.


注意:使用%p说明符打印地址.喜欢

printf("array--->%p", (void *)array);   

否则,使用错误的说明符将调用未定义的行为.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有