C++數組參數應用方式探討

來源:互聯網
上載者:User

對於經驗豐富的編程人員來說,C++程式設計語言應該是他們經常使用於程式開發的一種實用性語言。那麼,在C++中,C++數組參數永遠不會按值傳遞。它是傳遞第一個元素(準確地說是第0個)的指標。

例如,如下聲明:

 
  1. void putValues(int[10]); 

被編譯器視為:

 
  1. void putValues(int*); 

C++數組參數的長度與參數聲明無關。因此,下列三個聲明是等價的:

 
  1. void putValues(int*);  
  2. void putValues(int[]);  
  3. void putValues(int[10]); 

因為數組被傳遞為指標,所以這對程式員有兩個含義:

1、在被調函數內對參數數組的改變將被應用到數組實參上而不是本地拷貝上。當用作實參的數組必須保持不變時,程式員需要保留數組的拷貝。函數可以通過把參數型別宣告為const來表明不希望改變數組元素:

 
  1. void putValues(const int[10]); 

2、數組長度不是參數類型的一部分。函數不知道傳遞給它的數組的實際長度,編譯器也不知道,當編譯器對實參類型進行參數類型檢查時,並不檢查數組的長度。
例如:

 
  1. void putValues(int[10]); //視為int*  
  2. int main()  
  3. {  
  4. int i, j[2];  
  5. putValues(&i); //ok:&i是int*; 潛在的運行錯誤  
  6. putValues(j); //ok:j被轉換成第0個元素的指標  
  7. // 實參類型為int*:潛在的運行錯誤  
  8. return 0;  

參數的類型檢查只能保證putValues()的再次調用都提供了int*型的實參。類型檢查不能檢驗實參是一個10元素的數組。

習慣上,C風格字串是字元的數組,它用一個Null 字元編碼作為結尾。但是所有其他類型,包括希望處理內含字元的字元數組,必須以某種方式在向函數傳遞實參時使其知道它的長度。一種常見的機制是提供一個含有C++數組參數的長度的額外參數。例如:

 
  1. void putValues(int[], int size);  
  2. int main()  
  3. {  
  4. int i,j[2];  
  5. putValues(&i, 1);  
  6. putValues(j, 2);  
  7. return 0;  

另外一種機制是將參數聲明為數組的引用。當參數是一個數群組類型的引用時,數組長度成為參數和類型的一部分,編譯器檢查數組實參的長度與在函數參數類型中指定的長度是否匹配。

 
  1. // 參數為10個int的數組  
  2. // parameter is a reference to an array of 10 ints  
  3. void putValues(int (&arr)[10]);  
  4. int main()  
  5. {  
  6. int i, j[2];  
  7. int a[10];  
  8. putValues(i); // 錯誤:實參不是10個int的數組  
  9. putValues(j); // 錯誤:實參不是10個int的數組  
  10. putValues(a); // 正確  
  11. return 0;  

因為C++數組參數的長度現在是參數類型的一部分,所以putValues()的這個版本只接受10個int的數組。這限制了可以作為實參被傳遞給putValues()的數組的種類。但是,它也使函數的實現更加簡單。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.