我想要一个指向静态分配结构的全局指针。
这个编译
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;
答案 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;