【发布时间】:2014-08-12 15:51:12
【问题描述】:
这是我的简单 C 程序。
#include <stdio.h>
float*multiply(int, float);
main(){
int i =3;
float f = 3.50, *p;
p = multiply(i, f);
printf("%u\n", p);
printf("%f\n", *p);
return 0;
}
float *multiply(int ii, float ff){
float product = ii * ff;
printf("%f\n", product);
printf("%u\n", &product);
return (&product);
}
这个程序给出以下输出:-
但是,当我注释掉multiply 函数中的两个“printf”语句时,它会给出以下输出:-
我真的很确定我没有犯任何愚蠢的错误。我只是注释掉两行。
谁能告诉我为什么会这样?这是操作系统/系统相关的问题吗?
printf函数如何增加变量的寿命?
【问题讨论】:
-
未定义的行为是未定义的。取消引用悬空指针是未定义的行为。使用
%u打印指针也是如此。那应该是%p和(void *)p。 -
永远不要返回指向本地的指针...
-
如果你想在函数内外使用相同的内存区域,你应该将它作为参考传递给函数。像 void/bool multiply(int ii, float ff, float &result);
-
您也可以
malloc()浮动指针,然后将计算结果存储在其中。不要忘记在 main 中free()