这是我的简单 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
函数如何延长变量的生命周期?
最佳答案
您正在返回本地基于堆栈的变量product
的地址,这将导致未定义的行为。
此外,要打印指针的值,应使用 %p
而不是 %u
。 http://www.cplusplus.com/reference/cstdio/printf/
关于c - printf函数会影响变量的生命周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268753/