0

我的一个同事问了这个问题:Array size in multidimensional array with pointers

答案都非常明确,因为您无法计算出指针引用的数组的大小。

我最初的想法是首先取消引用指针,然后计算数组本身的大小。为什么这行不通?取消引用指针不会给你完整的数组吗?

4

2 回答 2

3

C中没有“完整数组”,至少不像您所期望的那样。

数组总是可以表示为指向第一个元素的指针,以及有关数组布局的信息。

此信息在运行时不可用,它是实际数组(如int foo[6][2][12])类型的一部分,因此编译器可以在生成代码以访问元素时直接使用该知识。正如 Lundin 所指出的,可变长度数组(在 C99 中引入)是个例外。对于那些,编译器必须添加运行时代码才能sizeof工作。

如果您传递foo给函数taking int *,则无法神奇地从中重新创建维度数据。所有看起来都一样的指针int,你可以传递&foo[0][0][0]或者只是一个普通的地址int

于 2013-02-13T10:26:27.370 回答
0

不幸的是,C 中没有办法确定数组的大小。数组只是指向内存位置的指针。您必须知道该位置有多少内存是数组的一部分。

这就是为什么标准库中使用数组的大多数方法要么需要以 nul 结尾的数组,要么需要一个额外的参数来告诉它们它们的长度。

于 2013-02-13T10:27:25.433 回答