2016-02-04 70 views
1

我創建了一個2D數組,並製作了一個指向第一個元素的指針。我試圖使用指針來打印2D數組,但是出現以下錯誤。不知道我在這裏做錯了什麼。如何通過指針打印2D數組? C++

source_file.cpp: In function ‘int main()’: source_file.cpp:15:27: error: invalid types ‘char[int]’ for array subscript cout << pname[x][y] << endl;

     ^

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    char name[2][2] = {'E', 'f', 'g', 'r'}; 
    char* pname = &name[0][0]; 

    for (int x = 0; x<2; x++) 
    { 
    for (int y = 0; y<2; y++) 
     { 
     cout << pname[x][y] << endl; 
     } 
    } 
} 
+0

你的陣列看起來像一個維 – Kad

+0

PNAME不是一個二維數組,它是一個char * – ForeverStudent

+0

你爲什麼要採取一個指向'name'?這可能有助於提供更實質性的答案。 – Tommy

回答

1

我會使用類似:

#define x_size 2 
    [...] 
    char (*pname)[x_size] = &name[0]; 

    for (int x = 0; x<2; x++) 
    { 
    for (int y = 0; y<2; y++) 
     { 
     cout << pname[x][y] << endl; 
     } 
    } 

或:

int x_size = 2; 
    char* pname = &name[0][0]; 

    for (int x = 0; x<2; x++) 
    { 
    for (int y = 0; y<2; y++) 
     { 
     cout << pname[x*x_size + y] << endl; 
     } 
    } 
+0

謝謝!!!!!! – rose

2

什麼是發生在這裏,char*式下降,從C風格的2-d陣列name數組的大小信息。因爲pname只是一個char*,它的用戶無法知道它指向的東西的大小和形狀。

+0

哈希標籤指針不是數組 – ForeverStudent

5

pname是指向char的指針。所以pname[x]char。因此,pname[x][y]是嘗試從字符中提取第y項,就像您輸入char t; t[10];一樣。

假設你想通過一個指針,因爲你想通過引用傳遞,你想採取char pname[][10]的參數。

如果您只是想要線性輸出項目,請使用當前的pname並沿着for(int c = 0; c < 4; c++) cout << pname[c] << endl;步驟。

+0

@Tomyy哦,我明白了..謝謝! – rose

0

這樣做:

int main() { 
    char name[2][2] = {{'E', 'f'}, {'g', 'r'}}; 
    char pname[2][2]; 
    memcpy(pname, name, sizeof (char)*2*2); 

    for (int x = 0; x<2; x++) { 
     for (int y = 0; y<2; y++) { 
      cout << pname[x][y] << endl; 
     } 
    } 
} 

將輸出: E f g r用換行其間

查找存儲器複製here

+0

什麼答案! – Curious

+0

通過更改問題的參數並回答新問題來解答問題。非常小林丸。 – user4581301

+0

謝謝!!!!!! – rose