c語言之陣列初始化

2022-08-21 01:18:14 字數 879 閱讀 8879

在c語言中,我們經常會有兩種初始化的方式(一維陣列):

方式一

int arr[20];
這種方式是在c語言編譯階段對陣列分配了固定的記憶體空間,但沒有為c語言賦值,此時,對該陣列進行列印輸出的話,則會輸出隨機的數字。

方式二

int arr = ;
同樣是在編譯階段為陣列分配連續的記憶體空間,此時的長度如果不寫,則會根據給定的元素個數程式自己進行確定。

綜上,我們可以知道在c語言中,通過以上的方式對陣列進行初始化都是在編譯階段確定陣列長度的,即陣列長度是固定不變的。可以看下面的乙個例子:

int size = 20;

int arr[size];

對上面的**進行編譯則會報錯,提示陣列初始化有問題,這是因為編譯器無法知道陣列大小,也就無法進行記憶體分配,從而導致報錯。

那麼我們有什麼方法可以在c語言中實現陣列大小的動態改變呢?我們知道,c語言中的陣列,在記憶體中就是一段連續的記憶體空間,其中有乙個指標指向著它的第乙個元素,也就是第乙個元素的位址,我們可以來驗證一下:

int a[20] = ;

printf("%d\n",*a); //輸出1 等價於 printf("%d\n",a[0]);

所以,我們通過指標的方式動態地生成我們的陣列,實現如下:

int size = 20;

int *a = (int*)malloc(sizeof(int)*size);

首先定義乙個指標,之後利用malloc函式為其分配一段連續的記憶體空間,這裡就和陣列的實現是一樣的了,通過指標的方式,動態地建立了我們的陣列。

C語言陣列初始化

陣列宣告時必須指明陣列元素的資料型別以及陣列中元素個數,計算機才可以為陣列預留出足夠的空間。陣列大小必須為常量。define size 10 int a 12 int b 100 c size 可以在宣告時通過初始值列表實現陣列元素初始化 int a 3 如果初始值列表中提供的元素個數少於陣列元素個...

C語言陣列初始化

wchar t wname 128 char cname 256 我感興趣的是 1.這種賦值的結果。2.這種形式是否符合標準編碼規則?我找到了如下資料,可能有助於對這個知識點的掌握。初始化值的個數可少於陣列元素個數。當初始化值的個數少於陣列元素個數時,前面的按序初始化相應值,後面的初始化為 0 全域...

c語言 柔性陣列初始化

在做專案時,遇到相似結構,差異在乙個成員,這個成員想表達可變陣列,資料結構如下 struct a struct b 目的 合併兩個結構,用同乙個結構表達 初始化變數,或陣列 首先合併ab兩個結構不難,可以使用柔性陣列 struct ab 這樣可以初始化成員 struct ab var 問題似乎解決,...