[問題] 請教一個結構陣列大小的問題

看板C_and_CPP作者 ( ~~)時間11年前 (2015/01/13 23:35), 11年前編輯推噓2(2011)
留言13則, 7人參與, 最新討論串1/2 (看更多)
開發平台(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

01/14 00:04, , 1F
因為藍色部分你是傳陣列進 sizeof,綠色傳的是指標
01/14 00:04, 1F

01/14 00:14, , 2F
陣列跟指標是不同type 只是陣列可以Decay成指標
01/14 00:14, 2F

01/14 00:22, , 3F
指標都是4bytes哦
01/14 00:22, 3F

01/14 00:23, , 4F
but長度固定的陣列可以在編譯期間算出大小
01/14 00:23, 4F

01/14 00:24, , 5F
陣列名稱跟指標不一樣 但是有時候可以當成指標用 是
01/14 00:24, 5F

01/14 00:24, , 6F
因為程式語言本身operations的定義所造成的
01/14 00:24, 6F

01/14 00:25, , 7F
指標也有可能 8bytes 等等,總之,是視系統而定的固定值
01/14 00:25, 7F

01/14 00:26, , 8F
!! 你的平台似乎是8 bytes
01/14 00:26, 8F

01/14 00:42, , 9F
對指標做sizeof()只會得到指標的大小,跟array不同
01/14 00:42, 9F

01/14 00:44, , 10F
而你的系統64bit指標大小為8bytes,所以/sizeof(char)剛好=8
01/14 00:44, 10F

01/14 00:57, , 11F
那請問有辦法知道指標指的那"整個"array的大小嗎?
01/14 00:57, 11F

01/14 01:03, , 12F
size_t test(struct wNode test[100]) 應該可以,你試試
01/14 01:03, 12F

01/14 08:18, , 13F
樓上,1) test 撞名了 2) 傳進引數的 test 會被解讀為指標
01/14 08:18, 13F
文章代碼(AID): #1KjJj37S (C_and_CPP)
文章代碼(AID): #1KjJj37S (C_and_CPP)