程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++_系列自學課程_第_7_課_數組_《C++ Primer 第四版》,大學課程自學網

C++_系列自學課程_第_7_課_數組_《C++ Primer 第四版》,大學課程自學網

編輯:C++入門知識

C++_系列自學課程_第_7_課_數組_《C++ Primer 第四版》,大學課程自學網


  說到數組,大家應該都很熟悉,在C、Pascal、Java等語言中,都有數組的概念。在C++中也提供了對數組的支持。數組簡單來說就是一堆相同

數據類型對象的集合。 這裡要把握住兩個要點: 相同的數據類型、集合。

 

一、數組

1、定義

     數組是由數組存儲的對象的類型名、標識符和數組維數組成一種復合數據類型。 類型名規定了可以存儲在數組中的對象的類型, 標識符用來標識

數組,用來在程序中引用數組元素, 維數用來規定數組可以存放多少數組元素。

  數組的定義如下所示:

    類型名    數組標識符[n];  

下面是一些數組的例子:

  int   iArray[10];   //定義一個數組存儲int型對象,可以存儲10個整型的數組。

2、訪問

  可以通過下標操作符訪問數組元素,就和vector一樣。

  例如定義:

  char chArray[3];    

    chArray[0] = 'A';

  chArray[1] = 'b';

  chArray[2] = '\0';

  通過下標操作符訪問數組的元素, 下標從0開始計算,所以最大的下標== 數組的元素個數 - 1 ;  在使用的是有要注意不能越界。

數組越界容易引起一些奇怪的錯誤。

3、數組元素的初始化

  在定義數組的時候可以同時初始化數組中的元素。如下所示:

  int  iArray[3] = {10,2,3};  這樣就定義了一個整型數組,數組有三個元素,三個元素初始化為10、2、3。 即 iArray[0] = 10;

iArray[1] = 2; iArray[2] = 3;  這裡用{ }的括起來的3個數字,稱為初始列表。

  如果提供初始列表那麼可以省略定義數組的長度。例如:

  int iArray[ ] = {10, 2, 3} ;   這樣定義了一個整型數組,數組的長度為3。

  char chArray[] = "volcanol";  這樣定義了一個字符型數組,數組的長度為9;  這裡只有8個字符, 為什麼會有9個元素呢,這是因為

字符串字面值在系統中默認會自動添加一個 null 字符, 就是 '\0' ; 為了添加一個存儲'\0'的元素,所以最終會有9個數組元素。

  還有一種情況:

  int iArray[5] = {1, 2, 3} ;  這裡定義了一個數組,可以存放5個元素, 但是初始化列表只提供了3個元素,還少2個元素, 這裡就會有

iArray[0] = 1,  iArray[1] = 2;  iArray[2] = 3, iArray[3] = 0 , iArray[4] = 0; 

 

要點:如果不提供初始化值,那麼數組元素的值就和普通變量一樣

  1、全局數組如果是內置類型,則初始化話為0.

  2、局部數組如果是內置類型,則會得到隨機值。

  3、如果數組是類類型,則會調用默認構造函數來初始化。如果沒有默認構造函數,則必須為數組元素提供顯示初始化列表。

 

4、數組的訪問

  前面說過數組和vector有點類似,而且可以通過下標訪問。 

  下面來個實例:

int main()
{
    int iArray[10];

    for(int i=0; i != sizeof(iArray)/sizeof(int); i++)
        iArray[i] = i;

    for(int i= 0; i != sizeof(iArray)/sizeof(int); i++)
        cout<<iArray[i]<<endl;

    return 0;
}

這樣就可以將 iArray數組的元素賦值為0到9;執行結果如下所示:

[root@localhost cpp_src]# g++ test.cpp 
[root@localhost cpp_src]# ./a.out 
0
1
2
3
4
5
6
7
8
9

  要點, 在使用 sizeof操作符的時候,需要注意sizeof求的是占用的字節數,求出來的不是數組的長度。

Exp:

int main()
{
    cout<<sizeof(L'a')<<endl;

    return 0;
}

程序執行結果如下所示:

[root@localhost cpp_src]# g++ test.cpp 
[root@localhost cpp_src]# ./a.out 
4

  因此下面的程序段,需要注意:

int iArray[10];

for(int i = 0; i != sizeof(iArray); ++i )  //錯誤的理解 sizeof操作符, 從而到錯誤的結果, 這個地方需要注意

    iArray[i] = i ;

  

5、數組下標越界

int main()
{
    string strArray[2];

    strArray[0] = "volcanol";
    strArray[1] = "hi,";

    cout<<strArray[1]<<strArray[2]<<endl;

    return 0;
}

  這裡我們越界訪問啦,輸出結果如下:

[root@localhost cpp_src]# g++ test.cpp 
[root@localhost cpp_src]# ./a.out 
hi,DiƿLiƿh4��H�\4iƿ~{L|������3��5�_4����ևDiƿP�@��3<iƿ+ 4�yƿ�yƿ�yƿ�yƿ�yƿ�yƿ≥Æ¿≥Æ¿P≥Æ¿␉≥Æ¿┌≥Æ¿/≠Æ¿_≠Æ¿Œ≠Æ¿Ì≠Æ¿æ≠Æ¿¶£Æ¿Î£Æ¿à£Æ¿û£Æ¿·Æ¿"·Æ¿6·Æ¿G·Æ¿Z·Æ¿·Æ¿•·Æ¿ ·Æ¿Á·Æ¿Î·Æ¿Ú·Æ¿<Æ¿^Æ¿┐Æ¿…Æ¿šÆ¿³Æ¿ÎÆ¿ØÆ¿         Ô  !    Р    ÿó«         ␍      4€                                  †
                                                            
                     {jƿi686[root@localhost cpp_src]#    

  這是讀出,如果是寫入的話, 必將導致程序錯誤,如果利用一些機制繞過系統的限制從用戶空間跳到內核空間,那麼就可能導致

內核不穩定。

 

6、數組不能直接直接賦值和復制

  與vector不同的是,數組不能直接整體的賦值和復制,這個需要注意。

  還有一個需要注意的問題。

int main()
{
    string strArray[2];
    
    strArray[0] = "volcanol";
    strArray[1] = "hi,";

    cout<<strArray[1]<<strArray[0]<<endl;

    return 0;
}

執行結果如下所示:

[root@localhost cpp_src]# ./a.out 
hi,volcanol

   這裡我們看到  strArray[0]  可以整體的賦值為一個字符串字面值,為什麼呢,這是因為數組的下標操作符返回的是左值, 而左值的

數據類型是string所以就可以進行整體賦值了。

    

  數組就說到這,其他還有一些關於數組的東西,待續.................


什地方有《C Primer Plus&C++Primer Plus第五版中文版》電子書下載?免費的

俺有,要的話,加俺

《CPrimerPlus 第5版 中文版》 作者:(美)Stephen Prata著;雲巅工作室譯 頁數:626 出版日期:2005.02 簡介:本書介紹了C語言的相關知識,包括數據類型、格式化輸入輸出、運算符、表達式、流程控制語句、函數、數組和指針、字符串操作、內存管理等內容。
 

自學C的一些問題

這位同學是想問下C語言的學習方法問題:首先二級證什麼也不是,只能說明你有了基礎,無所謂。科學的學習方法才能指向成功,說下C語言學習方法:首先應學習匯編語言,搞清楚程序的運行過程,王老師的《匯編語言》是驚世之作,循序漸進,然後學C,其實很簡單,特點指針,結構體,函數學好這三部分,是這門語言的性質。然後數據結構用C來實現,你會感受很深。關於工作先不要想這些,你要有耐心與毅力,才會學好,這門語言是其他語言的基礎,應學到精通。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved