2012-03-04 54 views
0

可能重複:
How to find the sizeof(a pointer pointing to an array)傳陣列不指向函數用C

欲數組傳遞給函數,使得如果我使用sizeof操作者上陣列內部函數體,我應該得到數組的實際大小,而不是指針的大小。對於e.g -

int main() 
{ 
    int arr[] = {1,2,3,4,5,6,7,8,9,0}; 

    printf("Array size = %d\n", sizeof(arr)/sizeof(int)); ---> O/P = 40/4 = 10 

    func(arr); 
} 

void func(int arr[]) 
{ 
    printf("Array size = %d\n", sizeof(arr)/sizeof(int)); --->O/P = 4/4 = 1 
} 

printf聲明在主函數打印10出,而func打印1C language可以這麼做嗎?

編輯:我知道像wrapping the array into a struct等其他替代品其實,我試圖來解決TopCoders網站和一個問題,要求給出一個問題是,我必須寫一個函數(下面給出的要求)。現在我很困惑,我如何計算int maxDonations(int[] donations)函數中int[] donations數組的大小。

Definition 
Class: BadNeighbors 
Method: maxDonations 
Parameters: int[] 
Returns: int 
Method signature: int maxDonations(int[] donations) 
(be sure your method is public) 

如果你願意,我可以發表整個問題。

+0

Dupe,無疑很多次,不,這是不可能的,但只有一百萬種其他方式來實現你想要的。 – 2012-03-04 07:45:10

+0

@ChrisLutz:我編輯了這個問題來包含我正在努力完成的任務。 – 2012-03-04 08:03:54

+2

問題規範的語法清楚地表明他們不是在談論C – 2012-03-04 08:17:26

回答

3

一種便宜的方法是將數組包裝到一個結構體中並傳遞該結構體(或指向該結構體的指針)。

但是,我建議傳遞一個指定數組大小的額外size_t參數。這會讓你的功能更加靈活

+0

我也喜歡傳遞額外的參數,但問題陳述說我必須寫這樣的函數。請參閱編輯部分,我也公佈了要求。 – 2012-03-04 08:02:51

0

在C中,您無法直接將數組作爲參數傳遞給函數。您可以傳遞結構,指針或其他數值,但不能傳遞數組。

0

基於你的問題中的約束條件,這個問題是不可能回答的。

在C,sizeof操作,而不是功能:你在你的問題正確提到這一點。但是,C運算符的編譯時間爲,而不是運行時,這意味着您不能在編譯時使用sizeof函數 - 在編譯時編譯器無法確定將如何調用func()

看問題的設置,我假設它是這一個:

http://www.cs.duke.edu/csed/algoprobs/neighbors.html

該網頁上所要求的方法簽名是:

public int maxDonations(int[] donations) 

但出於某種原因,你在你的問題中,你省略了關鍵字public。這個關鍵字表示有問題的語言是而不是 C,而this example solution看起來非常像是用Java編寫的,在這種語言中這是一個無問題,數組有一個length成員。

我建議你澄清從你的老師/網站/任何問題的要求,以檢查真正的預期。