c語言之數組初始化
在c語言中,我們經常會有兩種初始化的方式(一維數組):
方式一
int arr[20];
這種方式是在c語言編譯階段對數組分配了固定的內存空間,但沒有為c語言賦值,此時,對該數組進行打印輸出的話,則會輸出隨機的數字。
方式二
int arr[] = {2,3,4,5,6,7,8};
同樣是在編譯階段為數組分配連續的內存空間,此時的長度如果不寫,則會根據給定的元素個數程序自己進行確定。
綜上,我們可以知道在c語言中,通過以上的方式對數組進行初始化都是在編譯階段確定數組長度的,即數組長度是固定不變的。可以看下面的一個例子:
int size = 20;
int arr[size];
對上面的代碼進行編譯則會報錯,提示數組初始化有問題,這是因為編譯器無法知道數組大小,也就無法進行內存分配,從而導致報錯。
那么我們有什么方法可以在c語言中實現數組大小的動態改變呢?我們知道,c語言中的數組,在內存中就是一段連續的內存空間,其中有一個指針指向著它的第一個元素,也就是第一個元素的地址,我們可以來驗證一下:
int a[20] = {1};
printf("%d\n",*a); //輸出1 等價于 printf("%d\n",a[0]);
所以,我們通過指針的方式動態地生成我們的數組,實現如下:
int size = 20;
int *a = (int*)malloc(sizeof(int)*size);
首先定義一個指針,之后利用malloc函數為其分配一段連續的內存空間,這里就和數組的實現是一樣的了,通過指針的方式,動態地創建了我們的數組。