CPP第四版第四章第一節 陣列的定義和初始化

2022-09-20 01:57:08 字數 1995 閱讀 8746

陣列的定義和初始化:

陣列的維數必須用值大於等於1的常量表達事定義。此常量表示式只能包含整型字面值常、列舉常量或者用常量表示式初始的整形const物件。

非const變數以及要到執行階段才知道其值的const變數都不能用於定義陣列的維數。

顯示初始化陣列

在定義陣列時,可為其元素提供一組用逗號分隔的初值,這些初值用花括號{}括起來,稱為初始化列表:

const unsigned arrlen = 5

int intarr[arrlen] = ;

如果沒有顯示提供元素初值,則陣列元素會像普通變數一樣初始化

在函式體外定義的內建陣列,其元素均初始化為0;

在函式體內定義的內建陣列,其元素無初始化

不管陣列在**定義,如果其元素為類型別,則自動呼叫該類的預設建構函式進行初始化如果該類沒有預設建構函式,則必須為該陣列提供初始化

特殊的字元陣列

使用一組字元字面值初始化字元陣列時,一定要記得新增結束字串的空字元。

const char chararr[6] = ///這是錯誤寫法,此資料的長度應該為7,如果用字串初始化字元陣列,陣列長度為字串長度+1("null")。

不允許陣列直接複製和賦值

與vector不同,乙個陣列不能用另外乙個陣列初始化,也不能將乙個陣列賦值給另乙個陣列,這些操作都是非法的:         

int intarr = ; //陣列長度為3;

int intarr2(intarr) ///錯誤,乙個陣列不能用另乙個陣列初始化

int main()

習題4.1 假設get_szie是乙個沒有引數並返回int值的函式,下列哪些定義是非法的? 為什麼?

unsigned buf_size = 1024;

(a) int ia[buf_size]; //錯誤,buf_size是乙個變數,不能定義陣列的維長度

(b) int ia[get_size()]; //錯誤,get_size是乙個執行時才能獲取的變數值,不能定義陣列的維長度

(c) int ia[4*7 - 14]; //正確;

(d) chara st[11] = ; //錯誤,用字串初始化字元陣列時,陣列維長度應該是字串長度+1(null 空字元)

習題4.2 下列陣列的值是什麼?

string sa[10];

int ia[10];

int main()

sa和sa2的值分別是10個空字串,ia在函式體外定義的內建陣列,各元素初始化為0,ia2為在函式體內定義的內建陣列,各元素未初始化,其值不確定

習題4.3 下列哪些定義是錯誤的:

(a) int ia[7] = ; //正確

(b) vectorivec = ;//錯誤,vector物件不能按這種方式初始化

(c) int ia2 = ia; //錯誤,不能將乙個陣列賦值給另乙個陣列

(d) int ia3 = ivec; //錯誤,不能用vector物件來初始化陣列

習題4.4 如何初始化陣列的一部分或者全部元素?

const int arrlen = 5;

1、int arr1[arrlen] ;

2、int arr2[arrlen] = ; //剩下的兩位分別用0初始化掉

3、int arr3 = ; //此方法可以省略陣列長度

4、char arrchar[arrlen] = //切記,字串長度要比陣列維長度小1

...具體不羅列了。

習題4.5 列出使用陣列而不是vector的缺點。

警告:

與vector型別不同,陣列不提供push_back或者其它的操作在陣列中新增新元素,陣列一經定義,就不允許再新增新元素。

如果必須在陣列中新增新元素,必須自己管理記憶體:要求系統重新分配乙個新的記憶體空間用於存放更大的陣列,然後再把原陣列的所有元素複製到新分

配的記憶體空間中

第四章 第一節

乙個組合語言程式從寫出到最終執行的簡要過程 編寫 編譯 連線 執行 編寫 使用文字編輯器 如記事本 nodepad ultraedit等 用組合語言編寫彙編源程式。編譯 使用組合語言編譯程式 masm.exe 對源程式檔案中的源程式進行編譯,產生目標檔案。連線 使用連線程式 link.exe 對目標...

C Primer第四版第四章要點總結

int a 2 int b 2 b a 非法操作int a 3 int p1,p2 定義了兩個int型別的指標 int p3,p4 定義了乙個int型的指標p3和乙個int變數p4 p1 a p1指標指向a變數 std cout p1 函式 描述strlen s 返回s的長度,不包括字串結束符。st...

第四章 第一節 效率本質

學習是投資回報率最高的行為 拒絕學習的原因總結有以下幾點 1 不知道學習後有什麼收穫 2 沒有收穫,就不知道收穫有多好 多大 3 既然不了解學習的好處,就沒有動力學習 得出結論 學習乙個新東西,首先需要了解學習後能給自己帶來什麼樣的改變,可激發自己的學習興趣,增強自己的學習動力 作者對學習帶來的收穫...