透析C++的C++數(shù)組類型
C++數(shù)組的類型實(shí)際上是指數(shù)組元素的取值類型,對(duì)于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的,數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定,希望本文能給大家有用的信息。
例如,假設(shè)要保存一個(gè)整型數(shù)組,放五個(gè)整型值??梢月暶?FONT size=+0>數(shù)組如下:int myArray[5];這里編譯器為數(shù)組分配圖1.7所示的內(nèi)存空間。由于每個(gè)int要4個(gè)字節(jié)存儲(chǔ),所以整個(gè)數(shù)組占用20字節(jié)的內(nèi)存空間。
- 1: #include <iostream.h>
- 2: #include <conio.h>
- 3: #pragma hdrstop
- 4:
- 5: int main(int argc,char **argv)
- 6: {
- 7:char str[]="This is a string.";
- 8.cout << str << end1;
- 9.str[7]= '\0';
- 10. cout << str << end1
- 11. cout << end1 << "Press any key to continue...";
- 12: getch();
- 13: return 0;
- 14: }
進(jìn)一步說,如果知道數(shù)組的元素個(gè)數(shù),并在聲明數(shù)組時(shí)填充數(shù)組,則聲明C++數(shù)組時(shí)連數(shù)組長(zhǎng)度都可以省略。例如:int myArray[] = {-200, -100,0,100,200 };這是可行的,因?yàn)榫幾g器從賦予的數(shù)值表可以判斷出數(shù)組中元素的個(gè)數(shù)和分配給數(shù)組的內(nèi)存空間。
數(shù)組可以是多維的。為了生成兩維整型數(shù)組,這樣就分配15個(gè)int空間(共60字節(jié))。數(shù)組的元素可以和一維數(shù)組一
樣訪問,只是要提供兩個(gè)腳標(biāo)操作符:int x = mdArray[1][1]+mdArray[2][1];
C++一個(gè)強(qiáng)大的特性是能直接訪問內(nèi)存。由于這個(gè)特性,C++無法阻止你寫入特定內(nèi)存地址,即使這個(gè)地址是程序不讓訪問的。下列代碼是合法的,但會(huì)導(dǎo)致程序或Windows崩潰:int array[5];array[5]=10;這是常見的錯(cuò)誤。
因?yàn)?FONT size=+0>C++數(shù)組是以0為基數(shù)的,***腳標(biāo)應(yīng)是4而不是5。如果重載數(shù)組末尾,則無法知道哪個(gè)內(nèi)存被改寫了,使結(jié)果難以預(yù)料,甚至?xí)?dǎo)致程序或Windows崩潰。這類問題很難診斷,因?yàn)槭苡绊懙膬?nèi)存通常要在很久以后才訪問,這時(shí)才發(fā)生崩潰(讓你莫名其中之妙)。所以寫入數(shù)組時(shí)一定要小心。
C++數(shù)組規(guī)則
◆數(shù)組是以0為基數(shù)。數(shù)組中的***個(gè)元素為0,第二個(gè)元素為1,第三個(gè)元素為2,等等。
◆數(shù)組長(zhǎng)度應(yīng)為編譯常量。編譯器在編譯時(shí)必須知道為數(shù)組分配多少內(nèi)存空間。不能用變量指定C++數(shù)組長(zhǎng)度。所以下列代碼不合法
◆大數(shù)組從堆疊(heap)而不是堆棧(stack)中分配(詳見稍后)。
◆從堆疊分配的數(shù)組可以用變量指定數(shù)組長(zhǎng)度。
這就在內(nèi)存中分配18字節(jié)的內(nèi)存空間用于存放字串。根據(jù)你的領(lǐng)悟能力,也許你會(huì)發(fā)現(xiàn)該字串中只有17個(gè)字符。分配18個(gè)字節(jié)的原因是字串要以終止null結(jié)尾,C++在分配內(nèi)存空間時(shí)把終止null算作一個(gè)字符。 終止null是個(gè)特殊字符,用|0表示,等于數(shù)值0。程序遇到字符數(shù)組中的0時(shí),表示已經(jīng)到字串末尾。為了說明這點(diǎn),輸入并運(yùn)行下列控制臺(tái)應(yīng)用程序。
【編輯推薦】