请教C语言中有关指针的3道题

来源:百度知道 编辑:UC知道 时间:2024/05/04 23:55:06
1.程序希望能调用函数foo给一个变量赋值,有什么错误?
main()
{
int binky;
foo(&binky);
}
void foo(int *tinky)
{
int slinky;
slinky = GetInteger();
tinky = &slinky;
}
2.这个怎么样?
main()
{
int* pinky;
pinky = bar();
}
Int *bar()
{
int winky;
winky = 5;
return(&winky);
}
3.调用moo函数后binky的值?
main()
{
int binky,*pinky;
binky = 1;
pinky = &binky;
moo(*pinky, pinky);
}
void moo(int tinky,int *winky)
{
int slinky;
slinky = 2;
*winky = tinky + slinky;
}
拜托楼下的老大,稍微说的详细点,比如说第一第二题该怎么改正?拜谢!

只有最后个是正确的,前两个犯的是同一个错误:函数里的临时变量是临时的,它在内存的空间在函数调用完毕的时候会被收回,而你tinky = &slinky是把这个临时变量的地址给tinky所指向的变量,那么函数调用完后他就没了。第二个也是一样的,只是一个在函数内赋值,一个在函数外赋值。
不过第三个例子也有一个问题,你在调用这个moo函数前得先声明,否则会无法通过编译,不过这不是指针的问题了。第三个成功调用后binky的值是3
以下是改正后的代码:
1、
main()
{
int foo(int);
int binky;
foo(&binky);
}
void foo(int *tinky)
{
int slinky;
slinky = GetInteger();
*tinky = slinky;
}
2、
main()
{
int bar();
int* pinky;
*pinky = bar();
}
Int bar()
{
int winky;
winky = 5;
return(winky);
}

前两个题错误类似,都是返回了局部变量的地址,因为局部变量都在栈上分配,当被调用函数执行完毕则释放局部变量占用空间,此时引用局部变量地址就造成空悬指针.
第三题结果为3

此外,三个题,被调用函数都需要在main函数前声明