C语言 如何知道指针数组中指针的长度是多少?



我有 5 个数组和一个指针数组,我需要知道指针数组中每个数组的长度是多少(不是 sizeof)。 我是怎么做到的?

int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int* arr6[] = { arr1, arr2, arr3, arr4, arr5 };

一旦数组被转换为指针(如数组arr6的元素),就无法找到其中的元素数量(在原始数组中)。 简化版本为:

int arr1[] = { 3, 9, 6, 7 };
int *p = arr1;
/* Now, there's no way to know the number of elements in arr1 solely
from the pointer 'p' */

要么你自己保留尺寸信息。一种方法是使用另一个数组来表示大小:

int* arr6[] = { arr1, arr2, arr3, arr4, arr5 };
size_t sz_arr6[] = {sizeof arr1/sizeof arr1[0], sizeof arr2/sizeof arr2[0], ...};

这个你知道的索引,你知道sz_arr6[i]对应于arr6[i]中的元素数量等等。

在 C++17 中,这很容易:std::size(arr),从<iterator>.

在此之前,请使用std::distance(std::begin(arr), std::end(arr))(使用相同的标头)。

你拥有的是指向数组第一项的指针。由此,无法判断数组的一般长度。

您还必须跟踪长度。

最新更新