繁体   English   中英

在C中初始化一个指向复合文字的指针

[英]Initializing a pointer to compound literals in C

这是初始化指针的一种不太常用的方法:

int *p = (int[10]){[1]=1};

在这里,指针指向复合文字。

#include <stdio.h>
int main(void)
{
    int *p = (int[10]){[1]=1};
    printf("%d\n", p[1]);
}

输出:

1

该程序已编译,并且可以在G ++编译器中正常运行。

所以,

  • 这是初始化复合文字的指针的正确方法吗? 要么

  • 它是未定义的行为,用于初始化指向复合文字的指针吗?

是的,有一个指向复合文字的指针是有效的。 标准允许这样做。

n1570-§6.5.2.5(p8):

示例1文件范围定义

 int *p = (int []){2, 4}; 

初始化p指向两个int数组的第一个元素,第一个具有值2,第二个具有值4。 该复合文字中的表达式必须是常量。 未命名对象具有静态存储期限

暂无
暂无

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

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