繁体   English   中英

指向静态分配结构的全局指针

[英]Global pointer to a statically allocated struct

我想要一个指向静态分配结构的全局指针。

这编译

struct sa{
    int a, b;
    char const* c;
};
struct sa* sap = &(struct sa){42,43,"x"};

但它是合法的和可移植的 C,还是我必须做类似的事情?:

static struct sa x = {42,43,"x"};
struct sa* sap2  = &x;

显然,根据http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 6.5.2.5 复合文字,5:

复合文字的值是由初始化列表初始化的未命名对象的值。 如果复合字面量出现在函数体外,则对象具有静态存储期; 否则,它具有与封闭块相关联的自动存储持续时间。

在全局范围内使用时它是合法的。

感谢WhozCraig让我知道构造的名称,以便我可以查找。 ;)

在全局范围内使用时是合法的,但是它需要一个字面量的地址,所以如果你试图改变这个值,你会得到一个错误。 虽然,阅读你的问题,因为文字是静态的,它可能对你有用。 就良好的编码实践而言,您可能希望使用

const struct sa* sap = &(struct sa){42,43,"x"};

或者,最好,

static struct sa x = {42,43,"x"}; const struct sa* sap2 = &x;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM