2012-03-01 81 views
0

我正在寫一個返回ints數組大小的函數。邏輯是:sizeof(arr)/sizeof(int);它工作正常,如果我將它保存到一個變量,但如果我將它返回給函數,我得到1爲10個字節大小的數組。爲什麼?這裏是我的代碼:相同的表達式,但在函數中使用時返回值不同

int b[10]; 
int t1= sizeof (b)/sizeof (int); 
size_t t2 = lenof(b); 
printf("t1 = %d, t2 = %d\n", t1, t2); 

size_t lenof (int arr[]) { return sizeof (arr)/sizeof (int); } 

上面的C代碼打印:

t1 = 10, t2 = 1 

有人可以給我解釋一下?也許我應該使用指針?謝謝。

+0

你應該使用指針。作爲參數,'int att []'實際上是int *,size與sizeof(int)相同。 – bmargulies 2012-03-01 03:02:58

回答

2

方案1:

int t1= sizeof (b)/sizeof (int); 

在這種情況下,sizeof(b)返回數組,其通過大小除以int正確產生數組元素的數目的大小。

方案2:
當你傳遞數組它衰變爲指針在array.Hence第一元素的功能,

lenof(int arr[]) 

實際上是完全等同於:

lenof(int *arr) 

GIven,sizeof (arr)會在您的系統上產生指針的大小&其大小看起來與大小爲int在您的系統上,因此該部門和該功能返回1


C不提供邊界檢查的陣列,所以,如果你寫beyonds數組邊界,你將永遠不會被警告。這基本上意味着使用數組時,你必須跟蹤自己有多少元素存在於數組中。

如果你需要函數中的數組大小最簡單的解決方案是將數組的大小作爲單獨的參數傳遞。

lenof(int arr[], int len); 
+0

我認爲'T x []'參數語法比C++的其他任何特性都讓更多的初學者感到困惑。過去5分鐘我們對此有兩個問題。 – 2012-03-01 03:13:45

+0

@SethCarnegie:確實,它可能是'C++ - Faq'或'C++ lounge-faq'的好選擇。 – 2012-03-01 03:52:06

+0

這個問題是關於C不是C++ ... – 2012-03-01 06:42:31

相關問題