[英]initialize the array with pointers to ints
嘿,我正在解決一個問題,這是我必須要做的:-
編寫一個名為initarray的函數,該函數將一個指向int的指針數組和一個表示該數組大小的int用作參數。 該函數應使用指向ints的指針(使用malloc)初始化數組,該指針的值與存儲指向它們的指針的數組索引相對應(存儲在數組索引2的指針應指向值為2的整數) 。
到目前為止,我已經寫了這篇文章,但是它給我一個錯誤“ [Error]可變大小的對象可能未初始化”,您能告訴我我在做什么錯嗎?
#include<stdio.h>
void initArray(int **a, int sz){
int i;
for (i = 0; i < sz; i++) {
a[i] = calloc (1, sizeof **a);
*a[i] = i;
}
}
int main(){
const int Var = 10;
int *array[Var] = {NULL};
initArray(array,3);
}
出於歷史原因,永遠不會將const
變量的值視為C中的常量表達式 。
因此,如果將其用作數組維,則該數組是可變長度數組 ,並且不允許可變長度數組具有初始化程序。
一種尚未提及的解決方案是使用enum
。 枚舉器實際上是常量表達式,它們不像預處理器宏那樣遭受相同的“更大沖擊”問題:
int main()
{
enum { Var = 10 };
int *array[Var] = {NULL};
initArray(array,3);
}
C沒有用戶定義類型的符號常量。 您遇到了與C ++的不同之一。
const
限定符只是對編譯器的保證,您將不會更改變量 (!) Var
。
具有初始化程序和全局數組的數組需要一個常量表示 ,可以在編譯時對其進行求值。 由於Var
在語義上仍然是變量,因此無法使用它。
模擬符號常量的C方法是宏:
#define ARRAY_SIZE 10
...
// in your function:
int *array[ARRAY_SIZE] = ...
宏由預處理器處理,是實際編譯器看到代碼之前的文本替換。
請注意,我將名稱更改為更不言自明的名稱。 宏也應該在文件級別,通常在開始時就可以了,以便於修改。 直接在代碼中使用整數常量 10
是一個壞主意。 當需要修改時,此類幻數通常會導致錯誤。
該錯誤表明您不能在可變大小的對象上使用初始化程序( main
函數中的= {NULL}
)。 雖然看起來它不是變量(由於Var
上的const
,並且因為10
是常量),但由於您正在通過變量訪問它,因此將其視為變量。 如果您使用:
int *array[10] = {NULL}
我認為您的代碼片段可以正常運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.