我有点像Java-holic。我想在C中了解有关数组的更多信息。是否有这样的数组:
int test[5][5][5]
我想知道它有多少个整数元素。我有三个问题:
int
类型元素。这是对的吗?test
有125个*int
类型元素是否正确?test
有5个**int
类型元素是否正确?答案 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了,但数组不是指针。