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

时间:2016-09-10 20:15:10

标签: c pointers 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;

2 个答案:

答案 0 :(得分:1)

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

  

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

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

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

答案 1 :(得分:0)

在全局范围内使用它是合法的,但它需要文字的地址,因此如果您尝试更改该值,则会出现错误。虽然,阅读你的问题,因为文字是静态的,它可能适合你。就良好的编码实践而言,您可能希望使用

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

或者,最好是

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

相关问题