我有一个问题应该相当简单(我希望)。
在c中,数组的大小为\TYPO3\CMS\Frontend\ContentObject\RecordsContentObject::render()
,
int array[10][10];
的数组的大小是多少?我知道int *array[10];
有10个元素,但*array
有多少个元素?
这是我理解中的一个漏洞,我真的想清理一下。谢谢你的帮助!
答案 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或任何元素。