2016-02-04 68 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