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

这是一种初始化指针的不常见方式:

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

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

 #include  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指向两个整数数组的第一个元素,第一个元素的值为2,第二个元素的值为4。 此复合文字中的表达式必须是常量。 未命名的对象具有静态存储持续时间