如何通过指针打印2D数组? C ++

时间:2016-02-04 20:42:08

标签: c++

我创建了一个2D数组,并创建了一个指向第一个元素的指针。我正在尝试使用指针打印2D数组,但我收到以下错误。不知道我在这里做错了什么。

  

source_file.cpp:在函数'int main()'中:source_file.cpp:15:27:   错误:数组下标的类型'char [int]'无效            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;  
      }  
  }
}

4 个答案:

答案 0 :(得分: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;步进。

答案 1 :(得分:2)

这里发生了什么,type类型从C风格的二维数组char*中删除数组大小信息。由于name只是pname,因此其用户无法知道其指向的内容的大小和形状。

答案 2 :(得分:1)

我会使用类似的东西:

Clients

或:

  #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;  
      }  
  }

答案 3 :(得分: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

查找memcopy here