2017-04-05 142 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

你有什麼是指向數組的第一項。從這個角度來看,沒有辦法知道陣列總體上有多長。

您將不得不跟蹤長度。