遇到一些麻煩了解這兩個代碼段之間的差: 我分配動態範圍內我的代碼爲一個整數數組空間與以下語句時的動態存儲器分配和sizeof()
int *arr = calloc(cnt, sizeof(int));
在另一個函數中,我通過了arr,我想確定arr中的大小(元素數量)。 當我打電話
int arr_sz = sizeof(arr)/sizeof(int);
它只返回1,這是一個字節的只是數目爲兩個參數的int我假定(4/4)= 1。 我只是認爲這將是一樣使用陣列
int arr[8];
int arr_sz = sizeof(arr)/sizeof(int);
返回數組中元素的實際數量。
如果有人可以清除這件事,那會很好。謝謝!
數組是公正的指針,編譯器可以幫助您管理。一旦他們通過一個函數,或者如果動態分配,編譯器不能幫助你。 – slezica 2011-03-30 20:22:38
@Santiago Lezica :: *數組只是指針,編譯器可以幫助您管理* - >這很奇怪。請通過 - http://www.lysator.liu.se/c/c-faq/c-2.html – Sadique 2011-03-30 20:27:52
您在報價中減半了我的評論。另一半很重要。 char a [10]和char * a之間顯然有區別,當你鍵入一行或另一行時會發生不同的事情。 – slezica 2011-03-30 20:34:36