Kun*_*asu 1 c c++ pointers pass-by-reference
为什么这段代码会产生意外的输出.
int * func(int *xp)
{
int y = 10 + *xp;
return (&y);
}
void main()
{
int x = 10;
int *xp = func(&x);
printf("%d\n", x);
printf("%d\n", *xp);
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
10
20
Run Code Online (Sandbox Code Playgroud)
实际输出:
10
1074194112
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 11
您将返回一个指向变量(y)的指针,该变量在您离开时超出范围func.这是未定义的行为.
目前还不完全清楚你要实现的目标,但有几种方法可以解决这个问题:
intby值;*xp到位,不要退货;int*参数并将结果存储在那里(再次返回void);malloc或在堆上分配内存new并返回(调用者将负责正确释放该内存).如果不了解更广泛的背景,就无法说出上述哪一项适用于您的问题.
最后,main()应该返回int(感谢@pmg发现这一点).这与您遇到的问题无关,但值得指出.