C/C++陣列初始化的總結
阿新 • • 發佈:2018-12-13
目錄
以前剛開始學陣列初始化,一直都沒搞太清楚,包括參加PAT考試,直到看了胡凡的《演算法筆記》,逐漸清晰,是這樣的:
-
陣列定義不初始化會被隨機賦值
因此如果陣列的所有元素在下面沒有逐一賦值,但是又會使用到的話,最後不要只定義而不初始化。會帶來問題。
-
陣列初始化的幾種形式
- 可以直接用{}:a[10]={},就可以讓a[10]陣列中的所有元素全為0;
- 也可以{}內包含0:a[10]={},也可以讓a[10]陣列中的所有元素全為0;
- {}內寫一個值只會讓第一個元素為這個值,後面的依舊是0:a[3]={5},陣列實際上被初始化為{5,0,0}
-
陣列初始化為某一固定值
可以將陣列初始化為某一固定值。有兩種方法,一種是使用<string>(C++)或<string.h>(C)中的memset()函式,還有一種是使用<algorithm>中的fill()函式,fill函式可以初始化容器和陣列。
-
memset(陣列名,值,sizeof(陣列名))
只建議使用memset()的時候初始化為0或者-1。menset()函式的功能性不如fill()函式,其優點在於執行速度更快。
程式例項:
#include <stdio.h>
int main(){
int a[10];
memset(a,5,sizeof(a));
for(int i=0;i<10;i++)
printf("%d",a[i]);
return 0;
}
//output:5555555555
-
fill(begin(),end(),value)
fill()可以把陣列和容器中的某一段區間賦值為某個相同的值。和memset()不同的是這裡的賦值可以是陣列型別對應範圍中的任意值。
程式例項:
#include <iostream> #include <algorithm> using namespace std; int main(){ int a[10]; fill(a,a+5,233); for(int i=0;i<10;i++) cout<<a[i]<<" "; return 0; } /* 233 233 233 233 233 0 31 0 0 0 -------------------------------- Process exited after 0.4914 seconds with return value 0 請按任意鍵繼續. . . */
從這裡也可以看出,a[]後面的元素是隨機賦值的。
建議採用fill()而不是使用memset()。