作者CoSNaYe ( ~~)
看板C_and_CPP
標題[問題] 請教一個結構陣列大小的問題
時間Tue Jan 13 23:35:28 2015
開發平台(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