首页 > 解决方案 > size_t (*B)[N] 和 size_t *B[N] 之间的差异

问题描述

c++中这两行代码有什么区别?

size_t (*B)[N] = new size_t[N][N];size_t *B[N] = new size_t[N][N];

第一个编译正确,但第二行,g++ 给出了这个错误

matrixim.cpp:43:20: error: array must be initialized with a brace-enclosed initializer
   43 |     size_t *B[N] = new size_t[N][N];

标签: c++g++

解决方案


size_t *B[N]

这里,B是一个N指针数组size_t

size_t (*B)[N]

这里,是一个指向sB数组的指针N size_t


这两种结构都可以用来创建近似二维数组的东西,但是它们在内存中的布局非常不同。

size_t *B[N]看起来像这样:

 B            +-------------+-------------+-----+-------------+
+--------+    | B[0][0]     | B[0][1]     | ... | B[0][N-1]   |
| B[0]   +--->+-------------+-------------+-----+-------------+
+--------+
| B[1]   +--->+-------------+-------------+-----+-------------+
+--------+    | B[1][0]     | B[1][1]     | ... | B[1][N-1]   |
|        |    +-------------+-------------+-----+-------------+
|  ...   |
|        |
+--------+
| B[N-1] +--->+-------------+-------------+-----+-------------+
+--------+    | B[N-1][0]   | B[N-1][1]   | ... | B[N-1][N-1] |
              +-------------+-------------+-----+-------------+

BN是指向 的指针数组size_t,每个指针都指向 的数组的第一个元素N size_t


size_t (*B)[N]看起来像这样:

 B        +---------------------------------------------------+
+----+    | B[0]                                              |
|    +--->+ +-------------+-------------+-----+-------------+ |
+----+    | | B[0][0]     | B[0][1]     | ... | B[0][N-1]   | |
          | +-------------+-------------+-----+-------------+ |
          +---------------------------------------------------+
          | B[1]                                              |
          | +-------------+-------------+-----+-------------+ |
          | | B[1][0]     | B[1][1]     | ... | B[1][N-1]   | |
          | +-------------+-------------+-----+-------------+ |
          +---------------------------------------------------+
          |                                                   |
          | ...                                               |
          |                                                   |
          +---------------------------------------------------+
          | B[N-1]                                            |
          | +-------------+-------------+-----+-------------+ |
          | | B[N-1][0]   | B[N-1][1]   | ... | B[N-1][N-1] | |
          | +-------------+-------------+-----+-------------+ |
          +---------------------------------------------------+

这里,B是一个指向数组数组的第一个元素的N指针N size_t


推荐阅读