2017-04-05 38 views
0

我有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 }; 
+0

基于这个家庭作业的所有以前的版本,是不是在数组本身的答案? –

+0

恐怕你不能。一旦转换为'int *',它们的大小将不可避免地丢失给编译器。在运行时,一个int数组没有大小的概念。您应该:将其大小记录在其他地方,或者隐式编码(例如,最后一个元素应该总是指定的,否则不使用,常量,比如'0'或'-1')。 – rslemos

+1

不完全重复,但这个问题似乎有更好的理解这个作业http://stackoverflow.com/questions/43191792/sorting-5-arrays-in-one-function –

回答

1

一旦数组已被转换为指针(如数组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]等元素的数量。

0

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

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

+0

对不起,我忘了提到这一点。代码是在C – user7415633

+0

我认为OP在'arr6'之后想要数组的长度(转换为指针)。比如,'arr6 [0]'中有多少项? –

+0

是的,我想知道它们在arr6 [0]或arr6 [1] – user7415633

0

你有什么是指向数组的第一项。从这个角度来看,没有办法知道阵列总体上有多长。

您将不得不跟踪长度。