#include<stdio.h>
void main()
{
int *j;
void fun(int);
fun(&j);
}
void fun(int *k)
{
int a=10;
k=&a;
printf("%d\n%d\n%d\n",k,&a,*k);
}
答案 0 :(得分:2)
你需要在主
之前有一个有趣的“前瞻声明”void fun(int* k);
int main()
{
...
答案 1 :(得分:1)
也许这会帮助您了解正在发生的事情......
在Main()中声明是好的,你的问题是它不正确。它不遵循您的使用。 当你调用fun()时,你正在向它传递一个int **,你的声明说fun()接受一个int而不是一个int **。
你已经声明了一个int * j,然后当你把它传递给乐趣时,你传递(指针的地址,最终是一个int **)。这不是宣言所说的。
提示:打印指针值时,请使用%p而不是%d。
当我完成输入时,每个答案都已经有了相同的东西......: - )
答案 2 :(得分:0)
我想知道,您想用该代码做什么? 我想到了这个:
#include<stdio.h>
void fun(int*);
int main()
{
int j;
fun(&j);
return 0;
}
void fun(int *k)
{
int a=10;
k=&a;
}
这是你想要的吗?
因为你的代码中有一些奇怪的东西:
答案 3 :(得分:0)
您需要在fun()
之前声明main()
的原型,而不是main()
。原型的参数列表和函数定义也需要相同。当您致电fun()
时,您需要传递正确类型的参数。您需要传递int *
,而您传递int **
。
但是,即使您修复了这些明显的错误,您的程序也可能无法达到预期效果。你真的需要了解指针以及如何使用它们。
答案 4 :(得分:0)
添加其他答案中指出的问题,
int *j;
您声明j
哪些指向到int
类型变量。
fun(&j);
您正在将指针变量(int**
)的地址传递给期望int*
建议: 改为
void fun(int **k){ //Need to change declaration. Plus, the rest of the fun(..) body wouldnt make much sense though.
或致电
fun(j);
答案 5 :(得分:0)
我会在这里列出一些错误。
void fun(int);
此声明与实际功能定义不匹配,后者需要int *
。
fun(&j);
这与上面的声明或实际的函数定义不匹配。它传递指针的地址,或int **
。
printf("%d\n%d\n%d\n",k,&a,*k);
请勿使用%d
打印地址。请改用%p
。
答案 6 :(得分:0)
除了编译器会警告你的所有事情 - 函数声明不匹配定义,将错误类型的参数传递给fun,将错误的参数传递给printf等等你正试图做的事情无论如何都是愚蠢的在堆栈中,因此一旦fun返回,存储在j中的int的地址将无效。