我正在试验双指针(指向指针的指针),并希望正确地理解它。我正在试用下面的代码
#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值吗?
发布于 2013-04-13 00:06:19
我得到了一些垃圾价值。是不是因为我没有声明Q为双指针?
本质上是这样的:由于您将q声明为指向int的指针,因此取消引用操作*q认为该地址是一个int。当该int作为指针发送给%p时,您会遇到未定义的行为。请注意,即使在指针的表示与int的表示完全相同的平台上,该行为也将保持未定义状态。这就是未定义行为的背信弃义的本质:有时它是“错误地”工作的。
发布于 2013-04-13 00:06:28
在本例中,p是一个指向整数的指针,这意味着&p是指向一个指向整数的指针的指针。因此,应该将q声明为int**
从我下面的评论...您错误地声明了q ...因此,*q是一个整数,而不是一个指针,您正在向printf()传递一个整数,它将在其中查找内存地址……在那之后几乎所有的东西都是未定义的行为。
发布于 2013-04-13 00:06:39
这一行不正确
int *q = &p;&p是指向int (y)的指针(p)的地址
将其赋值给指向int (q)的指针将进行重新解释
*q会将p的地址解释为整数。这与y (=5)的内容不同。
https://stackoverflow.com/questions/15975980
复制相似问题