代码之家  ›  专栏  ›  技术社区  ›  jack-london

C++中的多维数组和指针?

  •  0
  • jack-london  · 技术社区  · 16 年前
    int *x = new int[5]();
    

    int[][] ?

    int **x = new int[5][5] () //cannot convert from 'int (*)[5]' to 'int **'
    

    在第一个语句中,我可以使用:

    x[0]= 1;
    

    但第二个更复杂,我想不出来。 我是否应该使用类似于:

    x[0][1] = 1;
    

    或者,计算实际位置,然后得到值 第四行第1列

    x[4*5+1] = 1;
    
    6 回复  |  直到 16 年前
        1
  •  2
  •   Michael Mrozek    16 年前

    您可以分别进行初始化:

    int **x = new int*[5];
    for(unsigned int i = 0; i < 5; i++)
        x[i] = new int[5];
    
        2
  •  4
  •   Tim Cooper    15 年前

    我更喜欢这样做:

    int *i = new int[5*5];
    

    5 * row + col .

        3
  •  2
  •   Jon Reid    16 年前

    根本没有 new[][]

    int **x = new int*[5];
    

    然后遍历该数组。为每个元素分配一个int数组:

    for (std::size_t i = 0; i < 5; ++i)
        x[i] = new int[5];
    

    当然,这意味着您在取消分配时必须执行相反的操作: delete[] 每个元素,然后 删除[]

        4
  •  1
  •   TonyK    15 年前

    你就是这样做的:

    int (*x)[5] = new int[7][5] ;
    

        5
  •  0
  •   Tim Cooper    15 年前

    Ff数组具有预定义的大小,您可以简单地编写:

    int x[5][5];
    

    它 compiles

        6
  •  0
  •   Community Mohan Dere    9 年前

    有几种方法可以实现这一点:

    • 使用指向数组的指针数组。这种方法的问题是必须手动(在循环中)分配所有内部数组。

    • 有些人会建议使用std::vector的std::vector,但这是低效的,因为在调整向量大小时必须进行内存分配和复制。

    • Boost的multi\u数组库中有一个更有效的向量向量版本。

    无论如何,这个问题最好在这里回答: How do I use arrays in C++?