代码之家  ›  专栏  ›  技术社区  ›  msc

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

  •  1
  • msc  · 技术社区  · 7 年前

    以下是一种不常见的初始化指针的方法:

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

    所以

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   haccks    7 年前

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

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

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