我有 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))
(使用相同的标头)。
你拥有的是指向数组第一项的指针。由此,无法判断数组的一般长度。
您还必须跟踪长度。