看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Xcode 6.1.1 問題(Question): 對於陣列大小這部分真的搞不大懂,麻煩大家一下了。 我寫了如下的code, 簡單求一下 1)一個普通字元陣列 2)一個結構陣列 的大小 ====================================================================== int main(int argc, const char * argv[]) { struct wNode wordArray[100]; char word[100]; size_t strcSize = (sizeof(wordArray)/ sizeof(struct wNode)); 這裡得到的strcSize 為 100 size_t strcSize2 = test(wordArray); 為什麼用function傳回來的strcSize2 就變為0? size_t charSize = (sizeof(word)/ sizeof(char)); 這裡得到的testSize 為 100 size_t charSize2 = test2(word); 為什麼用function傳回來的testSize2 就變為8? } size_t test(struct wNode *test){ size_t testSize = (sizeof(test)/ sizeof(struct wNode)); return testSize; } size_t test2(char *test2){ size_t testSize = (sizeof(test2)/ sizeof(char)); return testSize; } ====================================================================== 麻煩大家了, 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.111.248 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421163331.A.1DC.html ※ 編輯: CoSNaYe (36.227.111.248), 01/13/2015 23:37:03 ※ 編輯: CoSNaYe (36.227.111.248), 01/13/2015 23:37:28
wenyonba: 因為藍色部分你是傳陣列進 sizeof,綠色傳的是指標 01/14 00:04
fireslayer: 陣列跟指標是不同type 只是陣列可以Decay成指標 01/14 00:14
longlongint: 指標都是4bytes哦 01/14 00:22
longlongint: but長度固定的陣列可以在編譯期間算出大小 01/14 00:23
longlongint: 陣列名稱跟指標不一樣 但是有時候可以當成指標用 是 01/14 00:24
longlongint: 因為程式語言本身operations的定義所造成的 01/14 00:24
ACMANIAC: 指標也有可能 8bytes 等等,總之,是視系統而定的固定值 01/14 00:25
longlongint: !! 你的平台似乎是8 bytes 01/14 00:26
tj386: 對指標做sizeof()只會得到指標的大小,跟array不同 01/14 00:42
tj386: 而你的系統64bit指標大小為8bytes,所以/sizeof(char)剛好=8 01/14 00:44
CoSNaYe: 那請問有辦法知道指標指的那"整個"array的大小嗎? 01/14 00:57
ACMANIAC: size_t test(struct wNode test[100]) 應該可以,你試試 01/14 01:03
EdisonX: 樓上,1) test 撞名了 2) 傳進引數的 test 會被解讀為指標 01/14 08:18