2017-04-22 123 views
0

我收到了一個任務,雖然沒有指定我想實現指針的使用。我遇到的問題是我相信我沒有第二次正確傳遞2D陣列。我第二次的意思是我想將數組從main傳遞給一個函數,然後再從這個函數傳遞給另一個函數(如果有人知道這樣做的一些適當的術語,我將不勝感激,如果你能分享它。 )由於我已經寫了一堆其他代碼,我將提供如何傳遞它的方法,如果我正確地做到了這一點,我將提供其餘代碼以查找代碼中是否存在其他錯誤。傳遞二維數組

int main(){ 
    char seats[rows][columns] //rows and columns are global integers 
    assignSeats(&seats); 
} 
void assignSeats(char (*sPlan)[rows][columns]){ 
    assignFirstClass(sPlan); 
} 
void assignFirstClass(char (*sPlan)[rows][columns]){ 
    //user inputs for row and col 
    (*sPlan)[row][col] = 'X'; 
} 

只是提到,我沒有得到任何錯誤,只是我沒有得到我給的數組位置的值。雖然錯誤可能在其他地方,但我首先要確認我正在正確地傳遞數組,因爲這對我來說是新的。預先感謝您的幫助。

解決方案 問題是不是傳遞指針的方法,簡單地說,而不是:

(*sPlan)[row][col] = 'X'; 

我寫道:

(*sPlan)[row][col]; 

它只是去多次傳給我。

+1

的[傳遞的2D陣列,以C++函數]可能的複製(http://stackoverflow.com/questions/8767166/passing-a-2d-array-to-ac功能) – nitronoid

+0

是的,我已經看到了,這就是我做了第一遍。但它並沒有解決第二遍問題。這是我詢問的地方。 –

+0

查看此[問題](https://stackoverflow.com/questions/8767166/passing-a-2d-array-to-ac-function)爲傳遞二維數組的不同方法 – nitronoid

回答

0

您可以通過將您的電話替換爲assignSeats(seats);並將您的功能參數更改爲assignSeats(char (&sPlan)[rows][columns]來通過參考來傳遞數組,您的第二個功能也是如此。

您的函數還需要返回類型,並且在第二個函數定義中缺少括號。

建議的修復:

#include <iostream> 

int main() 
{ 
    char seats[rows][columns]; //rows and columns are global integers 
    assignSeats(seats); 
    std::cout<<seats[row][col]; //Check the function has worked 
    return 0; 
} 

void assignSeats(char (&sPlan)[rows][columns]) 
{ 
    assignFirstClass(sPlan); 
} 

void assignFirstClass(char (&sPlan)[rows][columns]) 
{ 
    //user inputs for row and col 
    sPlan[row][col] = 'X'; 
} 
+0

可悲的是,這也沒有做到這一點。 –

+0

@ Jorge你期待什麼結果,你如何檢查它? – nitronoid

+0

@ nitronoid函數assignSeats(席位)後,在主函數中調用另一個函數來打印當前值。在分配之前,我將全部初始化爲'*'。當我在assignSeats(席位)之前打印它時,我得到所有*。這就是爲什麼我知道第一次傳球正常。我期待在用戶在assignFirstClass函數中選擇的一行中的'X',我沒有得到。 –