[英]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
? 提前致謝!
方括號括起的初始化程序不是數組,因此不能衰減到指針類型。 並且由於c
是int *
的數組,因此每個初始化程序都必須是該類型。 嵌套的初始化程序僅適用於實際的數組(不適用於指針)或結構。
但是,您可以做的是在初始化器中使用具有數組類型的復合文字 。
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 };
或者,您可以使用復合文字來避免聲明變量x
和y
,如另一個答案所建議的那樣。 在這兩種情況下,初始化器元素都是數組,並且它們確實會衰減到指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.