程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Thinking in C++: 數組指針及數組作為函數的參數

Thinking in C++: 數組指針及數組作為函數的參數

編輯:C++入門知識


今天我們來深入的討論一下當數組array作為C++函數的參數的情況:

 

數組的標示符(identifier)不同於普通變量的標示符,它是一個左值(lvalue),你不能賦值給它,當你只是使用這個標示符不帶方括號時,你得到的是這個數組的首地址。

 

[cpp]
#include <stdafx.h>  
#include <iostream>  
using namespace std; 
 
int main() 

int a[10]; 
cout<<"a="<<a<<endl; 
cout<<"&a[0]="<<&a[0]<<endl; 

#include <stdafx.h>
#include <iostream>
using namespace std;

int main()
{
int a[10];
cout<<"a="<<a<<endl;
cout<<"&a[0]="<<&a[0]<<endl;
}大家可以復制上面的程序到vs中執行一下看結果,會發現這兩個值是一樣的。

當你將一個數組作為參數傳遞給一個函數的時候一定要特別注意:如果你聲明一個數組作為函數參數,實際上你是聲明了一個指針!舉例如下:

 

[cpp]
#include <iostream>  
#include <string>  
using namespace std; 
void func1(int a[], int size) { 
    for(int i = 0; i < size; i++) 
        a[i] = i * i - i; 

#include <iostream>
#include <string>
using namespace std;
void func1(int a[], int size) {
    for(int i = 0; i < size; i++)
        a[i] = i * i - i;
}[cpp] 
void func2(int* a, int size) { 
    for(int i = 0; i < size; i++) 
        a[i] = i * i + i; 

void func2(int* a, int size) {
    for(int i = 0; i < size; i++)
        a[i] = i * i + i;[cpp] view plaincopyprint?
<SPAN style="FONT-FAMILY: Courier; FONT-SIZE: 12px"><SPAN style="FONT-FAMILY: Courier; FONT-SIZE: 12px"></SPAN></SPAN><P align=left>}</P><P align=left> </P><P align=left>void print(int a[], string name, int size) {</P><P align=left>    for(int i = 0; i < size; i++)</P><P align=left>        cout << name << "[" << i << "] = "<< a[i] << endl;</P><P align=left>}</P><P align=left> </P><P align=left>int main() {</P><P align=left>    int a[5], b[5];</P><P align=left>    // Probably garbage values:</P><P align=left>    print(a, "a", 5);</P><P align=left>    print(b, "b", 5);</P><P align=left>    // Initialize the arrays:</P><P align=left>    func1(a, 5);</P><P align=left>    func1(b, 5);</P><P align=left>    print(a, "a", 5);</P><P align=left>    print(b, "b", 5);</P><P align=left>    // Notice the arrays are always modified:</P><P align=left>    func2(a, 5);</P><P align=left>    func2(b, 5);</P><P align=left>    print(a, "a", 5);</P><P align=left>    print(b, "b", 5);</P><P>} ///:~</P> 

} void print(int a[], string name, int size) {    for(int i = 0; i < size; i++)        cout << name << "[" << i << "] = "<< a[i] << endl;} int main() {    int a[5], b[5];    // Probably garbage values:    print(a, "a", 5);    print(b, "b", 5);    // Initialize the arrays:    func1(a, 5);    func1(b, 5);    print(a, "a", 5);    print(b, "b", 5);    // Notice the arrays are always modified:    func2(a, 5);    func2(b, 5);    print(a, "a", 5);    print(b, "b", 5);} ///:~
盡管func1和func2聲明了不同的參數,但用法是一致的。這就造成了一個問題:數組不能按值傳遞!也就是當你使用數組作為參數的時候,你不能自動得到一份本地的數組副本,數組總是引用傳遞。

 

 

 

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