答案 0 :(得分:2)
让我们举个例子:
int *x = i(1, 0);
printf("%d\n", *x);
这会调用未定义的行为,因为函数参数具有自动存储持续时间,并在函数返回时被丢弃。
在函数i
内,a
和b
对象是函数的本地对象,它们的生命周期在函数返回时结束。
答案 1 :(得分:2)
是的,他们可能会有所不同。尝试做一些实验。
#include <stdio.h>
int *i(int a, int b) {
if (a > b)
return &a;
else return &b;
}
void test(void) {
printf("%p\n", (void*)i(1, 0));
}
int main(void) {
printf("%p\n", (void*)i(1, 0));
test();
return 0;
}
注意:不要取消引用返回的指针,因为它们指出从函数返回时已经消失的内容。