4
#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;
}

在上面的程序中,我试图定义一个提到返回类型的结构。struct s定义成功。

这是一个有效的用法吗?我从未见过这样的真实场景。

如何使这个程序工作?

我收到此编译器错误:

asd.c: In function ‘main’:
asd.c:21:15: error: lvalue required as unary ‘&amp;’ operand
4

1 回答 1

7

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

但是,您可以而且应该以更自然的方式编写:

struct s ss = fun();
于 2012-09-03T07:12:41.997 回答