2013-04-14 117 views
1

該程序僅用於將完整的二維數組傳遞給函數。我能夠通過鉤子或騙子運行該問題,但我沒有理解。我寫了一個程序,我應該寫蘇聯,我已經寫了使其工作(在評論中) 任何人都可以請解釋我這個問題?將二維數組傳遞給函數的錯誤

#include<iostream> 
#include<conio.h> 
void print(bool *a); 
using namespace std; 
int main() 
{ 
    bool arr[3][3]={1,1,1,1,0,0,0,1,1}; 
    print(arr[0]);//**This IS working but why we need subscript 0 here only print(arr) should work?..** 
    getch(); 
    return 0; 
} 
void print(bool *a) 
{ 

    for(int i=0;i<3;i++) 
    { 
     for(int j=0;j<3;j++) 
      { 
       cout<<*(a+i*3+j)<<"|";//**cant we use cout<<a[i][j] here??In 1 d array it is working fine** 
      } 
      cout<<"--"; 
    } 

} 

回答

1

用途:

void print(bool a[][3]) 

,如果你想打電話print(arr);

然後你可以使用a[i][j]來訪問print函數體數組元素這是正確的原型。

arrbool陣列3的陣列,並且傳遞給print函數時調用arr表達式被轉換爲指針陣列的bool3

+0

但是爲什麼在1 D數組中,我們可以使用[i]來訪問數組,我們只在func中傳遞基地址?例子是#include #include void print(int * a); using namespace std; () int arr [3] = {1,2,3}; print(arr); getch(); return 0;對於(int i = 0; i <3; i ++) cout << a [i]; } } –

3
void print(bool *a) 

應該是

void print(bool a[][3]) 

的編譯器需要知道第二維的尺寸,以便爲尋址來計算偏移量。

void print(bool a[][3], int rowSize) 
{ 
    for(int i=0;i<rowSize;i++) 
    { 
    for(int j=0;j<3;j++) 
    { 
     cout<<a[i][j]<<"|"; 
    } 
    cout<<"--"; 
} 

在C++中,你應該選用vector<vector <bool> >超過2D動態數組arr

+0

我們不能只分析基地址(指針)來傳遞整個二維數組嗎? –

+0

@AmanJagga這樣我們只傳遞基地址,但是,因爲它是一個二維數組,所以它在內部存儲爲1d,所以只指定基地址是不夠的,你必須指定第二維的大小以便編譯器來尋址,這就是爲什麼需要知道第二維的大小 – taocp

+0

然後你能解釋一下上面的程序(我發佈的程序發佈的問題)是否工作正常?此外,我不明白我們如何通過你的方式傳遞基地址?我們還沒有使用指針,然後如何傳遞基地址? –