陣列的初始化是乙個簡單的不能再簡單,常見的不能再常見的用法。好像沒什麼可講的啊,哈哈,不過,你確定對這個問題已經很了解了嗎?
同志,不得不提醒你一下,一旦犯錯誤,越是常見的用法,產生的危害也就越大,所以強烈建議你把我這篇文章看下去。
開始之前,題外一句,「實驗是檢驗**的唯一標準」!
可以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 注 開發中習慣...