大多數人對於C++數組的理解還是不夠深刻的,如果想要對數組賦值,那麼首先要向數組元素賦值終止null和其它字符值時,必須用單引號,所以在處理C++數組時一定要仔細。。
如果重載數組末尾,則無法知道哪個內存被改寫了,使結果難以預料,甚至會導致程序或Windows崩潰。這類問題很難診斷,因為受影響的內存通常要在很久以後才訪問,這時才發生崩潰讓你莫名其中之妙)。所以寫入數組時一定要小心。
數組規則
◆數組是以0為基數。數組中的第一個元素為0,第二個元素為1,第三個元素為2,等等。
◆數組長度應為編譯常量。編譯器在編譯時必須知道為數組分配多少內存空間。不能用變量指定數組長度。所以下列代碼不合法,會導致編譯錯誤: 小心不要重載數組末尾。
◆ 大數組從堆疊heap)而不是堆棧(stack)中分配(詳見稍後)。
◆ 從堆疊分配的數組可以用變量指定數組長度。
字符數組
奇怪的是,C++不支持字串變量放置文本的變量),C++數組中的字串是用char數據類型的數組表示的。例如,可以將變量賦予char數組如下。這就在內存中分配18字節的內存空間用於存放字串。根據你的領悟能力。
也許你會發現該字串中只有17個字符。分配18個字節的原因是字串要以終止null結尾,C++數組在分配內存空間時把終止null算作一個字符。 新術語 終止null是個特殊字符,用|0表示,等於數值0。程序遇到字符數組中的0時,表示已經到字串末尾。為了說明這點,輸入並運行下列控制台應用程序。
- 清單1.6Nulltest.cpp
- 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: }
分析 最初,字符數組包含字符串This is a string和一個終止null,這個字串通過cout送到屏幕上。下一行將數組的第7個元素賦值為|0,即終止null。字串再次發送到屏幕上,但這時只顯示This is。原因是計算機認為數組中字串在第7個元素上終止,余下字串仍然在內存空間中,但不顯示,因為遇到了終止null。圖1.10演示了將數組的第7個元素賦值為|0的語句前後的字符數組。
說明 C++程序中單引號與雙引號是有差別的。向數組元素賦值終止null和其它字符值時,必須用單引號。單引號的作用是將引號內的字符變成整型值該字符的ASCII值),然後將這個值存放在內存地址中。將字串賦予字符數組時,必須用雙引號。如果用錯引號,則編譯器會發生編譯錯誤。