c語言之數組初始化


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函數為其分配一段連續的內存空間,這里就和數組的實現是一樣的了,通過指針的方式,動態地創建了我們的數組。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM