C:* array [x]的大小?

时间:2017-01-13 10:16:13

标签: c arrays memory indexing

我有一个问题应该相当简单(我希望)。

在c中,数组的大小为\TYPO3\CMS\Frontend\ContentObject\RecordsContentObject::render()

例如,据我所知,有10个点存储10个整数。但是,声明为int array[10][10];的数组的大小是多少?我知道int *array[10];有10个元素,但*array有多少个元素?

这是我理解中的一个漏洞,我真的想清理一下。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

int *array[10];是一个包含10个int *的数组,因此元素数量为10个。

详细说明,对于int *array[10];array变量的ty类型是int * [10],是一个包含整数类型指针的10个元素的数组。

数组大小为10 * sizeof pointer-to-integer-in-your-platform

答案 1 :(得分:1)

  

数组有多少个元素?

 int *array[10];

array是指向int的10个指针的数组,与int* array[10]相同 - 所以array有10个元素(每个元素都是一个指针)。

答案 2 :(得分:1)

你必须理解C中的声明。 开始将其分成几部分:

int array[10][10];

array是变量的名称,部分[10]表示它是一个包含10个int数组的数组,每个数组包含10个元素(第二个[10])。 / p>

现在:

int * array[10];

array是变量的名称,部分[10]表示它是一个包含10个int *类型元素的数组(整数指针不像以前那样整数)。

第一种情况下的大小将是10个整数数组大小的10倍= 100个整数所需的空间。

在第二种情况下,将是保持10个整数指针的大小。

作为旁注,也许你的困惑来自于C允许以相同的方式访问两个声明的元素。即以下将获得第二个数组的第5个整数:

int b = array[2][5];

但差别仍然很大,因为在第一个声明中,编译器将分配连续空间来保存所有100个整数(按照C分配方法组织,每个连续10个10个整数的数组),在第二种情况下将是只分配了一个10个指针的数组,每个指针指向10个整数数组的位置。并且10个数组将不会被分配,也不会初始化指针。

在这种情况下,程序员有责任分配10个int数组,并将每个数组的地址分配给指针数组。

要澄清的另一点(感谢alk指出),在指针数组的情况下,第二维是未定义的,这意味着每个int指向的数组都可以是1,10 ,1000或任何元素。