【问题标题】:Directly assign value of struct member into variable直接将结构成员的值赋给变量
【发布时间】:2021-08-28 15:31:51
【问题描述】:

我遇到了以下代码,非常新颖有趣。

u8 m_var = stptfunc()->mem;

以前从未见过这种初始化。代码编译并运行良好。 我只是好奇这是否是一种常见的做法。

通常我会这样编码...

strtype *ptrfunc()
{
// statements
}

sttype *stvar = ptrfunc();
u8 var = stvar->mem;

示例代码:

typedef unsigned char u8;

typedef struct{
    u8 mem;
}sttype;

sttype *stptfunc(void)
{
    static sttype stvar;
    stvar.mem = 255;
    return &stvar;
}

int main()
{
    u8 m_var = stptfunc()->mem;
    printf("value of %d",m_var);
    return 0;
}

输出 [1]:https://i.stack.imgur.com/rSUaD.png

【问题讨论】:

  • 之所以有效,是因为stptfunc 正在返回static 变量的地址。以我的经验,这不是常见的做法 - 但它可能是。我想这取决于你问谁。
  • @JohnnyMopp 嗨......是的,它工作正常。这是一种常见的做法吗?
  • 以前从未见过这样的做法,我个人认为这是非常糟糕的做法:)

标签: c function pointers struct initialization


【解决方案1】:

stptfunc()->mem 表示stptfunc 是一个返回指针的函数,该指针被取消引用以获取其mem 字段。由于我们拥有整个程序,我们可以看到这个假设成立。

这可能是不好的做法。如果stptfunc 返回NULL 怎么办?不能保证不会。

在这样一个简单的程序中,这没什么大不了的,但这是一个不好的做法。

此外,根据 cmets,与使用 malloc/free 相比,函数中的静态变量可能是一种非常糟糕的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多