C 在函数的返回类型中定义结构

C 在函数的返回类型中定义结构,c,struct,C,Struct,除了memcpy行之外的所有内容都是正确的(尽管有点难读),编译器错误告诉您出了什么问题:您不能获取“临时”的地址(即函数调用表达式的结果) 然而,你可以也应该用更自然的方式来写: #include <stdio.h> #include <string.h> struct s { int data; } fun() { static struct s ss; ss.data = 20; return ss; } int main()

除了
memcpy
行之外的所有内容都是正确的(尽管有点难读),编译器错误告诉您出了什么问题:您不能获取“临时”的地址(即函数调用表达式的结果)

然而,你可以也应该用更自然的方式来写:

#include <stdio.h>
#include <string.h>

struct s
{
    int data;
} fun()
{
    static struct s ss; 
    ss.data = 20;
    return ss;
}

int main()
{
    struct s ss;
    memcpy(&ss, &(fun()), sizeof(struct s));

    printf("\n Data: :%d", ss.data);

    return 0;
}

错误:返回类型中可能未定义新类型
-gcc 4.6.1抱歉。我用g++编译。对不起,这里一切都很好,fun返回ss的副本。所以,对ss的主要改变,不会传播到ss的乐趣。只是为了词汇,暂时是不能正确描述事物。这通常被称为“右值”,你是对的,地址不能被这样一个野兽所占据。在C语言中还有其他称为复合文字的“临时变量”,可以取其地址。它在哪里提到临时变量?该标准规定:“在本国际标准中,有时被称为“右值”的内容被称为“表达式的值”
struct s ss = fun();