陣列的初始化

2022-03-25 19:14:43 字數 2580 閱讀 9356

陣列的初始化是乙個簡單的不能再簡單,常見的不能再常見的用法。好像沒什麼可講的啊,哈哈,不過,你確定對這個問題已經很了解了嗎?

同志,不得不提醒你一下,一旦犯錯誤,越是常見的用法,產生的危害也就越大,所以強烈建議你把我這篇文章看下去。

開始之前,題外一句,「實驗是檢驗**的唯一標準」!

可以char str;但是這只是指標,不是陣列

因為c++不允許這樣初始化陣列

但是你可以這樣

int n;

char *str;

cin>>n;

str=new((char)n);

cin.getline(str);

然後再輸入想要的字串

(其中n是你要輸入字元數+1,因為最後一位是'\n')

陣列的初始化

在了一些朋友寫的**時

,乙個簡單的陣列初始化

,把人那個搞的,又是

for迴圈

,又是判斷長度

.一般的陣列初始化

,也就是申請陣列的時候我們就初始化

,1.char buffer[1000] = ; //一般的話,我們只將陣列初始化為0,然後再使用.

c++中,編譯器會把第乙個初始化值賦給陣列的第乙個元素,然後用0賦值給其餘的元素.

2.char buffer = ; 陣列會自動計數,我們不用指定數字,以免畫蛇添足反而出錯。

3.char buffer[1000]; 

memset(buffer,10,sizeof(buffer)),

對於有特殊需要的我們可以這樣將陣列中的值全部初始化為1個值,沒必要用for迴圈,效率不高。

但是char buffer[1000]; memset (buffer,0,sizeof(buffer)) ,個人覺得這有點多此一舉.

一、將陣列所有元素初始化為0

1. 大括號形式

char a[4] = ;

long c[4] = ;

2. 字串形式

char b[4] = "";

long d[4] = "";

說明:1)上面兩種形式實際上都只是將陣列的第乙個元素置零了,但由於未初始化為0的元素系統會自動初始化為0,所以產生的效果是所以元素都被置零了。但大家不

要誤認為的作用是初始化陣列的所有元素值為n。需要強調的是,程式設計師至少必須把陣列元素的第乙個陣列元素初始化為0,才能使剩餘的元素自動初始化為

0。也就是說,定義陣列後必須要初始化,不要認為不初始化,系統就會自動初始化為0。實際上,把陣列初始化為0是在編譯時完成的。如果不初始化,那麼各數

組元素的值將是隨機數。

2)允許以字串的形式初始化陣列,所以,和""的效果是一樣的。而且,有時為了表示裡面存的是字串,使用""更醒目。

二、將陣列所有元素初始化為非0

1. for迴圈

char i = 0;

char a[4];

long b[4];

for (i = 0; i < 4; i++)

結果:值的情況:

a[0] = a[1] = a[2] = a[3] = 0x01;

b[0] = b[1] = b[2] = b[3] = 0x01;

記憶體情況(每行八個位元組,值為十六進製制表示):

a:01 01 01 01

b:00 00 00 01 00 00 00 01

00 00 00 01 00 00 00 01

2. memset

char a[4];

long b[4];

memset (a, 1, sizeof (a));

memset (b, 1, sizeof (b));

結果:值的情況:

a[0] = a[1] = a[2] = a[3] = 0x01;

b[0] = b[1] = b[2] = b[3] = 0x01010101;

記憶體情況(每行八個位元組,值為十六進製制表示):

a:01 01 01 01

b:01 01 01 01 01 01 01 01

01 01 01 01 01 01 01 01

說明:1)for迴圈和memset的只在char型陣列時效果相同,其餘情況效果不同,請認真區分二者的區別。

2)對於非char型陣列,使用memset時一定要小心,它是按位元組進行賦值的,如果你是想將非char型陣列的每個元素置為定值,而不是將記憶體每8位置為定量,最好使用for迴圈而不是memset。

三、錯誤用法

char a[4] = ;

long b[4] = ;

結果:值的情況:

a[0] = 0x01, a[1] = a[2] = a[3] = 0x00;

b[0] = 0x01, b[1] = b[2] = a[3] = 0x00;

記憶體情況(每行八個位元組,值為十六進製制表示):

a:01 00 00 00

b:00 00 00 01 00 00 00 00

00 00 00 00 00 00 00 00

說明:之前已經說了,上面這種用法的結果是只有陣列的第乙個元素被賦值了。很多人都在用這種方法對陣列進行初始化,但實際上這是乙個錯誤的用法,並不能實現將所有元素初始化為同一陣列的目的(置零除外)。

陣列初始化

cpp中陣列初始化方法 簡單的初始化 利用定義變數時賦初值進行初始化。int a 10 float f 10 char ch 5 大括號中的為初始值。較為複雜的初始化 利用memset函式初始化。memset函式用法 void memset void s,int c,size t n 將已開闢記憶體...

陣列初始化

flydream flydream c cat x.cpp include using namespace std int main int argc,char argv flydream flydream c flydream flydream c g g wall x.cpp x.cpp in ...

陣列初始化

一 定義陣列 type arrayname 注 1 陣列定義 c語言宣告 時,不能指定陣列長度。2 定義只是在stack中指定了乙個引用變數,heap中未分配記憶體,所以要在初始化後才能使用。二 陣列初始化 1 靜態初始化 arrayname new type 或 arraynane 注 開發中習慣...