C 指向静态分配结构的全局指针
我想要一个指向静态分配结构的全局指针 这就编译了C 指向静态分配结构的全局指针,c,pointers,struct,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; 显然,根据6.5.2.5复合文字,5: 复合文字的值是未命名对象的值 由初始值设定项列表初始
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;
显然,根据6.5.2.5复合文字,5:
复合文字的值是未命名对象的值
由初始值设定项列表初始化。如果出现复合文字
在函数体之外,对象具有静态存储
期间否则,它将具有与关联的自动存储持续时间
封闭块
在全球范围内使用时是合法的
谢谢你让我知道这个构造的名称,这样我就可以查到它了。;) 在全局作用域中使用时是合法的,但它需要一个文本的地址,因此如果您试图更改该值,您将得到一个错误。虽然,阅读你的问题,因为文字是静态的,它可能适合你。就良好的编码实践而言,您可能希望使用
const struct sa*sap=&(struct sa){42,43,“x”}代码>
或者,最好是
静态结构sax={42,43,“x”};
const struct sa*sap2=&x代码>您需要第二个示例(声明x,然后取addr)是否确定@bolov?对我来说,你不应该不能获取复合文字的地址,这一点并不明显。我需要研究一下。你是不是在问对a申请操作员地址是否合法?毕竟,他们的价值类别是左值,所以这应该得到支持。有趣的一点,我很高兴你们提出了它。但是根据我的答案链接中的标准草稿,如果复合文本标记为const(字符串文本成员可能始终是只读的),它将是只读的。Gcc同意,并且不会将复合文本放在只读内存中。