【发布时间】:2021-07-19 00:08:05
【问题描述】:
我有一个指向 C 中的数组的指针,我想遍历它,但我不知道大小:
int *array;
我不确定我应该如何进行。我在想我可能应该尝试通过以下方式找到大小:
int array_size = sizeof(array) / sizeof(int);
但我不知道这是否可行。我想知道是否有更优化的方法来做到这一点?
【问题讨论】:
-
如果你只有指针,那么你就不走运了。要么必须将大小传递给函数,要么数组内容必须有一个终止符,指示数组的结束。
-
如果您只有指针而不是原始数组定义,
sizeof(array)/sizeof(int)将不起作用。sizeof(array)在这种情况下是sizeof(int *),它总是一个指针的大小。 -
即使有一个while循环也不起作用?
-
如果您没有大小或终止值,则循环的类型无关紧要。您如何建议在没有大小或终止值的情况下结束循环?你不能。
-
我看不到任何人直接告诉你的最重要的事情是你所拥有的不是一个数组。这只是一个指针。一个数组在 C 中具有固定大小,用
[]声明,这将允许您方便地迭代一个。如果没有固定大小,它就不是数组。当然,您的array可能指向为数组分配的一些内存,但这不会使array成为数组,C 编译器也是这种观点。
标签: arrays c pointers implicit-conversion sizeof