gpt4 book ai didi

c - 指向指针的指针与指针

转载 作者:太空狗 更新时间:2023-10-29 15:00:56 27 4
gpt4 key购买 nike

我正在试验双指针(指向指针的指针)并想正确理解它。我正在尝试以下代码

#include<stdio.h>

int main()
{
int y = 5;
int *p = &y;
int *q = &p;

printf("\n\n %p %p %p %p %d\n\n",q,&p,p,*q,*p);

return 0;

}

现在在上面的代码中,p 是一个指向 y 的指针,q 是一个指向 p 的指针。我故意不使用双指针 (**q) ,只是为了检查会发生什么。编译器给了我一个警告,指示不兼容的指针类型。当我执行代码时,我明白 q 是指向 p 的指针,因此它包含 p 的地址,但是 *q 没有给我 p 中包含的值,即 y 的地址,而是我得到了一些垃圾值.是因为我没有将 q 声明为双指针吗?任何人都可以解释为什么我得到 *q 的一些奇怪的值吗?

最佳答案

I got some junk value. Is it because I have not declared q as a double pointer ?

本质上,是的:因为您将 q 声明为指向 int 的指针,解引用操作 *q 认为该地址是一个整数。当 int 作为指针发送到 %p 时,您遇到了未定义的行为。请注意,即使在指针表示与 int 完全相同的平台上,该行为也将保持未定义状态。这就是未定义行为的危险本质:有时它会“错误地”起作用。

关于c - 指向指针的指针与指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975980/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com