初始化
給數組指派的方法除了用指派語句對數組元素逐個指派外, 還可采用初始化指派和動态指派的方法。
數組初始化指派是指在數組定義時給數組元素賦予初值。數組初始化是在編譯階段進行的。這樣将減少運作時間,提高效率。初始化指派的一般形式為:
類型說明符 數組名[常量表達式] = { 值, 值……值 };
其中在{ }中的各資料值即為各元素的初值,各值之間用逗号間隔。例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
靜态和自動初始化
數組初始化類似标量變量初始化的方式:也就是取決于它們的存儲類型。存儲于靜态記憶體隻初始化一次,也就是在程式開始之前,程式不需要執行指令将這些值放在合适的位置,因為它們一開始就在那裡,這些是由連結器來完成的,它用可執行程式的檔案中合适的值對數組元素進行初始化,如果數組未被初始化,數組元素的初始值将會自動設定為零。當這個檔案載入到記憶體中準備執行時,初始化後的數組值和程式指令也一樣被載入到記憶體中,是以當程式執行時,靜态數組初始化已經完成。
對于自動變量而言,因為自動變量位于運作時堆棧中,執行流每次進入它們所在的代碼塊時,這類變量每次所處的存儲位置可能并不相同。在程式開始之前,編譯器沒有辦法對這些位置進行初始化,是以自動變量在預設情況下是未初始化的。若是自動變量在聲明中給出了初始值,每次當執行流進入自動變量聲明所在的區域時,變量就被一條隐式的指派語句初始化,這條隐式的指派語句和普通的指派語句一樣需要空間和時間來執行,數組的問題在于初始化清單中可能有很多的值,那麼初始化的時間将非常可觀。
因而需要考慮,當數組的初始化位于一個函數(或代碼塊)時,每次對數組進行重新初始化是否值得,若答案是否定的,就要把數組聲明成static形式,這樣數組的初始化隻需在程式開始前執行一次。
不完整的初始化
如下初始化:
int vector [5]={1,2,3,4,5,6};
int vector[5]={1,2,3};
已上兩種情況,第一種情況的定義是錯的,沒有辦法将6個整型值裝到5個整型變量中。
但是第二種情況是合法的,它為數組的前三個值提供初始化,最後兩個元素初始化為0。
自動計算數組長度
初始化:
int vector[]={1,2,3,4,5};
聲明中如果未給出數組長度,編譯器就把數組長度設定為剛好能夠容納所有的初始值的長度。
字元數組初始化
笨拙的方法:
char message []={'H','e','l','l','o'};
快速的方法:
char message []="Hello"
盡管這看上去是一個字元串常量,實際上并不是,它隻是前面一個例子中的另一種寫法,當用于初始化一個字元數組時,它就是一個初始化清單,在其它任何地方,它表示一個字元串常量:
如下:
char message[]="Hello";
char *message2="Hello";
這兩個初始化看上去很像,但是它們含義不同,前者初始化一個字元數組的元素,而後者是一個真正的字元串常量,這個指針變量被初始化為指向這個字元串常量的存儲位置,如下圖:

轉載于:https://www.cnblogs.com/xiaojianliu/articles/8722080.html