这是一种初始化指针的常见方法:
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 ++编译器中编译并运行良好。
所以,
这是初始化复合文字指针的正确方法吗?或
是否未定义行为初始化指向复合文字的指针?
答案 0 :(得分:2)
是的,有一个指向复合文字的指针是有效的。标准允许这样做。
n1570-§6.5.2.5(p8):
示例1文件范围定义
int *p = (int []){2, 4};
初始化
p
以指向两个整数数组的第一个元素,第一个元素的值为2,第二个元素的值为4。此复合文字中的表达式必须是常量。 未命名的对象 有静态存储时间。