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

作者: CoSNaYe ( ~~)   2015-01-13 23:35:28
開發平台(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;
}
======================================================================
麻煩大家了, 感謝!!
作者: wenyonba (射後不理很XX啊!!!!)   2015-01-14 00:04:00
因為藍色部分你是傳陣列進 sizeof,綠色傳的是指標
作者: fireslayer (fireslayer)   2015-01-14 00:14:00
陣列跟指標是不同type 只是陣列可以Decay成指標
作者: longlongint (華哥爾)   2015-01-14 00:22:00
指標都是4bytes哦but長度固定的陣列可以在編譯期間算出大小陣列名稱跟指標不一樣 但是有時候可以當成指標用 是因為程式語言本身operations的定義所造成的
作者: ACMANIAC (請肥宅救救肥宅)   2015-01-14 00:25:00
指標也有可能 8bytes 等等,總之,是視系統而定的固定值
作者: longlongint (華哥爾)   2015-01-14 00:26:00
!! 你的平台似乎是8 bytes
作者: tj386 (最愛歐陽三姊妹♥♥♥)   2015-01-14 00:42:00
對指標做sizeof()只會得到指標的大小,跟array不同而你的系統64bit指標大小為8bytes,所以/sizeof(char)剛好=8
作者: CoSNaYe ( ~~)   2015-01-14 00:57:00
那請問有辦法知道指標指的那"整個"array的大小嗎?
作者: ACMANIAC (請肥宅救救肥宅)   2015-01-14 01:03:00
size_t test(struct wNode test[100]) 應該可以,你試試
作者: EdisonX (卡卡獸)   2015-01-14 08:18:00
樓上,1) test 撞名了 2) 傳進引數的 test 會被解讀為指標

Links booklink

Contact Us: admin [ a t ] ucptt.com