C中的多维数组

时间:2015-04-19 19:12:07

标签: c++ c arrays pointers

我有点像Java-holic。我想在C中了解有关数组的更多信息。是否有这样的数组:

int test[5][5][5]

我想知道它有多少个整数元素。我有三个问题:

  1. 我认为有125个int类型元素。这是对的吗?
  2. test有125个*int类型元素是否正确?
  3. test有5个**int类型元素是否正确?

4 个答案:

答案 0 :(得分:7)

  

首先,我认为有125个int类型元素。

那是对的。它是由5个int个5个数组组成的5个数组的数组,这意味着总共有125个int s。

  

其次,上述'测试'是否正确?数组有125 * int类型的元素?

*int不是有效类型 - 大概是指int*。无论哪种方式,答案都是否定的。这里没有指针。

  第三,'测试'是否正确?数组有5个**类型的元素吗?

同样,**int可能意味着int**,但答案是否定的。这个宣言中没有指针。

大概你问这个是因为你知道"数组是指针"或者"数组只是引擎盖下的指针" - 这个想法是错误的。当你要求int[5][5][5]时,你会得到一个 - 一个包含总共125个int个对象的三维数组。

答案 1 :(得分:0)

此数组包含125个int类型的元素,除了这些整数之外,它不包含任何内容。

答案 2 :(得分:0)

考虑声明

int test[5][5][5];

一步一步。

首先考虑声明如

int test[5];

test有5个int类型的元素。

现在考虑

int test[5][5];

它声明了前面类型int[5]的5个元素的数组。因此,当数组的每个元素依次为一个数组并包含5个元素时,test中包含的int类型的元素总数等于5 * 5即25。

现在让我们回到声明

int test[5][5][5];

它定义了一个类型为int[5][5]的数组元素。每个元素包含25个int类型的对象。该阵列有5个这样的元素。所以它总共包含5 * 25个int类型的对象,这些对象是125个这样的对象。

所以数组

int test[5][5][5];

有5个int[5][5]

类型的元素

阵列

int test[5][5];

有5个int[5]

类型的元素

和数组

int test[5];

有5个int类型的元素。

在C ++中,多维数组是一个数组元素又是数组(而不是指针)。

答案 3 :(得分:0)

只有第一个陈述是正确的。而且你还有另一个保证:C ++中的多维数组(注意C和C ++是两种不同的语言)分配连续的内存块

  

[dcl.array]数组类型的对象包含连续分配   类型为T的非空N个子对象。

以下是:

int array[5][5][5];
int array2[125];

std::cout << (sizeof(array) == sizeof(array2)); // Yes

指数是对不同访问模式的抽象。

第二种不正确(int*int的类型不同)。即使在内存空间方面,通常也不能保证125个整数元素的数组将占用与125个整数指针数组相同的空间。

同样是第三个。

作为旁注:数组通常通过指针进行操作,并且整个主题称为&#34; 指针算术&#34;它与数组相辅相成,更不用说arrays decaying into pointers了,但数组不是指针