【发布时间】:2023-03-24 11:13:01
【问题描述】:
我读到了函数调用之间的 return 值,
并尝试了以下代码 sn-p :
/* file structaddr.c */
#include <stdio.h>
#define MSIZE 10
struct simple
{
char c_str[MSIZE];
};
struct simple xprint(void)
{
struct simple ret = { "Morning !" };
return ret;
}
int main(void)
{
printf("Good %s\n", xprint().c_str);
return 0;
}
代码编译后没有错误和警告。
使用 GCC 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) 和 Visual C++ 编译器测试。
gcc -m32 -std=c99 -Wall -o test structaddr.c
cl -W3 -Zi -GS -TC -Fetest structaddr.c
输出:
早安!
我对结果有点困惑。
代码写对了吗?
我的问题:
函数
returnvalue(array from astruct在上面的例子中),以及如何正确访问它们?return值的生命周期在哪里结束?
【问题讨论】:
-
返回值是临时的。它在使用后被丢弃。如果不将其存储到变量中,则在您第一次引用后它就消失了。
-
@JoachimPileborg 是的,我知道了,然后删除了我在您的此评论之前的评论。 :)
-
@boleto 你为什么感到困惑?你还期待别的吗?
-
C 和 C++ 是不同的语言,您应该在一个问题中只指定其中一个或输入两个问题,每种语言一个,除非有理由相信答案在两种语言。
标签: c visual-c++ gcc gcc4