通过解除引用其指针来计算数组的大小

时间:2013-02-13 10:23:51

标签: c arrays pointers

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

如果您将foo传递给使用int *的函数,则无法从中神奇地重新创建维度数据。所有指向int的指针都相同,您可以传递&foo[0][0][0]或仅传递普通int的地址。

答案 1 :(得分:0)

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

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