簡體   English   中英

GCC關於為數組分配指針變量的警告?

[英]GCC warning about assigning a pointer variable with an array?

代碼段:

int *c[2] = {{1,2,3}, {4,5,6}};

給出警告:

warning: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'
      [-Wint-conversion]
    int *c[2] = {{1,2,3}, {4,5,6}};
                  ^
warning: excess elements in scalar initializer
    int *c[2] = {{1,2,3}, {4,5,6}};
                    ^

我想數組{1,2,3}會衰減到指針,所以分配是合法的嗎?

此外,根據警告,編譯器為什么會認為我正在嘗試將int分配給int * 而不是int *int array type 提前致謝!

方括號括起的初始化程序不是數組,因此不能衰減到指針類型。 並且由於cint *的數組,因此每個初始化程序都必須是該類型。 嵌套的初始化程序僅適用於實際的數組(不適用於指針)或結構。

但是,您可以做的是在初始化器中使用具有數組類型的復合文字

int *c[2] = {(int []){1,2,3}, (int []){4,5,6}};

我想數組{1,2,3}會衰減到指針,所以分配是合法的嗎?

{1, 2, 3}不是數組,並且沒有衰減適用於它。 它是一個初始化程序,適用於初始化由三個或更多算術類型的元素組成的數組,但是您嘗試使用它來初始化指針。 您可以執行以下操作:

static int x[] = { 1, 2, 3 };
static int y[] = { 4, 5, 6 };
int *c[] = { x, y };

或者,您可以使用復合文字來避免聲明變量xy ,如另一個答案所建議的那樣。 在這兩種情況下,初始化器元素都是數組,並且它們確實會衰減到指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM