![](/img/trans.png)
[英]Why the size differs? sizeof(a) vs sizeof(&a) of an array?
[英]Constant size array initalization with sizeof
為什么以下工作在gcc c99上能正常工作
int a[] = {1,2,3};
int b[sizeof a / sizeof *a] = {0};
但這會導致編譯錯誤
int n = sizeof a / sizeof *a;
int b[n] = {0};
錯誤
file.c:14:2: error: variable-sized object may not be initialized
file.c:14:2: warning: excess elements in array initializer [enabled by default]
file.c:14:2: warning: (near initialization for 'b') [enabled by default]
n
是一個不同於sizeof a / sizeof *a
的變量,因為后者是在編譯時計算的。
int b[n]
聲明一個可變長度的數組。 您無法使用初始化列表初始化它。 您可以使用循環或memeset
函數將其所有元素初始化為0
。
memset(b, 0, sizeof(b));
第一個示例起作用是因為sizeof a / sizeof *a
是一個常量表達式,可以用作數組維。
在第二個示例中, n
不是常量表達式,因此編譯器將b
視為可變長度數組的定義,錯誤是說VLA可能未初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.