![](/img/trans.png)
[英]Getting the address of a statically allocated array into a pointer inside a struct
[英]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.