簡體   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