1

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

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++ 编译器中编译并运行良好。

所以,

  • 这是初始化指向复合文字的指针的正确方法吗?或者

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

4

1 回答 1

2

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

n1570-§6.5.2.5 (p8):

示例 1 文件范围定义

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

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

于 2017-10-04T05:25:40.360 回答