c - 指向 c 中的指针的指针,得到意外的值
问题描述
我正在对指针进行一些操作,并遇到了这个:
int main(void)
{
int a = 100;
int *p, *q;
p = &a;
q = &p;
printf("\n *q= %p",*q);
printf("\n &p= %p",&p);
printf("\n *p= %d",*p);
printf("\n q= %p",q);
printf("\n p= %p",p);
printf("\n &a= %p",&a);
return 0;
}
这给了我以下输出
*q= 0xe5b83d74
&p= 0x7ffee5b83d78
*p= 100
q= 0x7ffee5b83d78
p= 0x7ffee5b83d74
&a= 0x7ffee5b83d74
给出的值*q
与 的地址相似a
但不一样。是*q
不是指&a
?我不是想更正这段代码。这里实际发生了什么?
解决方案
指向的指针a
被截断并打印。您正在获取指向 an 的指针int
并将其设为指向 an 的指针 int
。它只显示指针的 32 位,这些 32 位可以放入int
.
如果您在 32 位平台(x86、ARM)上运行它,&a
则与*q
.
您在标题中注意到这是一个指向指针的指针。然而,事实并非如此。它是一个指向指针的指针,该指针已转换为指向 anint
并取消引用的指针。有一个区别,如图所示。
推荐阅读
- jqgrid - jQuery jqGrid 中的分页问题
- python-3.x - 如何在 Python 中替换字符串中的连字符和换行符
- javascript - SVG 模式上的转换原点在 Firefox/Safari 上不起作用
- css - 如何更改 flex 包装器中第二行的顺序?
- c# - 如何使用Discord.net 2.2.0 C#在discord中获取消息作者的昵称
- java - com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system.peers' 在 PT0.5S 后超时
- javascript - 如何导入 reactjs 代码来响应原生
- unity3d - unity mobile 中的缩放限制。透视相机
- json - 我应该如何使用 Dask 处理嵌套数据结构(例如 JSON、XML、Parquet)?
- botframework - 如何像用户输入一样显示自适应卡选择选项?