int main()
{
int *x = 100;
display(&x);
}
display(int *m)
{
show(&m);
}
show(int *m)
{
printf("%d",*m)`;
}
输出应为100.但它没有显示
答案 0 :(得分:4)
你搞乱了这些类型。 Se评论如下:
int main()
{
int *x = 100; // x is a "pointer to int" (with bad assignment)
display(&x); // Since you use &x you are passing a "pointer to a pointer to int"
}
display(int *m) // but the function just expects a "pointer to int"
{
show(&m); // Here you do the same
// m is a "pointer to int"
// so &m is a "pointer to pointer to int"
}
show(int *m) // but the function just expects a "pointer to int"
{
printf("%d",*m)`;
}
要解决此问题,请执行以下操作:
int main()
{
int x = 100; // x is a "int" (i.e. no *)
display(&x); // Passing a "pointer to int"
}
display(int *m)
{
show(m); // Just pass a "pointer to int" (i.e. no &) as
// m is already "pointer to int"
}
show(int *m)
{
printf("%d",*m)`;
}
答案 1 :(得分:2)
int *x = 100;
表示" x是一个引用地址100"处的内存单元的变量。在你的代码中手动分配指针地址几乎没有意义,因为......为什么你会这样做呢?如果您稍后在代码中尝试修改变量值,则很可能会遇到运行时错误。你最好只使x
成为一个普通整数而不是一个指针。&x
是变量x的地址。使用int *x
时,在调用display(&x)
时,您会调用带有签名display(int** m)
的函数。这不是您当前的display
功能。如果您希望匹配类型,请拨打display(x)
。如果您决定实际使x
成为一个普通整数,那么您可以保持display(&x)
调用。show(&m)
m
为int*
(正如您的display
签名所指定的那样),那么您的show
签名应该是show(int** m)
。只需拨打show(m)
即可。main
功能之后,请确保您的两个功能是前向声明的。好的尝试,但你应该更多地记录自己,有大量的基本指针使用的例子!
答案 2 :(得分:0)
在显示功能中,您已经有一个指针作为输入,您不需要再次获取该地址。您只需将指针传递到show
函数。
display(int *m)
{
show(m);
}