首页 文章

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

提问于
浏览
1

我创建了一个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

    做这个:

    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

  • 2

    pname 是指向 char 的指针 . 所以 pname[x]char . 因此 pname[x][y] 是尝试从char中获取第y个项目,就像您键入 char t; t[10]; 一样 .

    假设您想要通过引用传递指针,则需要使用 char pname[][10] 的参数 .

    如果您只想线性输出项目,请使用当前 pname 并沿 for(int c = 0; c < 4; c++) cout << pname[c] << endl; 步进 .

  • 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;  
          }  
      }
    
  • 5

    这里发生的是, char* 类型从C风格的二维数组 name 中删除数组大小信息 . 因为 pname 只是一个 char* ,它的用户无法知道它所指向的东西的大小和形状 .

相关问题