[轉錄]C語言的小問題
簡單的小問題。主要是確認是否正確。問題就是有?的地方。
題目:
char ary[] = "ABC";
char * ptr = "abc";
char * pElement;
char (* pWhole)[4];
1.
ary寫法用了多少memory------->當然是 sizeof(ary),一共4 byte,因為還有\0。
ptr寫法用了多少memory------->當然是 sizeof(char*)+sizeof("abc"),一共5個byte
。假設pointer用一個byte的話。
我的問題是:理論上操作ary的人,直接拿到ary,就是一個指向'A'的pointer,這是大家
都知道的。實作上,難道不需要一個存'A'位址的的地方?(沒修過compiler的報應出現)
我的猜想是,一個變數包括了 □□□ -> 型別/位址/值。應該array的型別和「操作」,
就帶有'A'位址的資訊,只是這個資訊,放在instruction/code memory裡面。
因此用ary[2] 和 用 *(ary+2)結果雖然相同,但前者或許省了一個tmp pointer的空間。
2.
pElement = ary; 是否等義於 pElement = &ary[0]; ------>當然對。
pWhole = &ary; !!! pWhole是指向整體ary[]的指標,而非指向'A',雖然一般都用指向
'A'來access。------->這是對的,只是指向整體arry似乎沒少有用武之處。
pWhole = ptr;=========> 錯,因為型別不同,pWhole要指向一個4個元素的char array
。
問題來了,雖然,基本的操作是沒問題的,比方說。
pElement+1 // 等同於 ary[1]
pWhole又該如何?
(*pWhole)[1] //是否等於 ary[1],應該是的,但是畫蛇添足。是嗎?
pWhole+1 // 理論上應該不行,又好像可以,我目前任為是可以的。
pWhole除了確保指到的空間是4byte,「指到整體array」有好處嗎?什麼時候會指到
「整體array」?
那反過來自問,把pElement的寫法,硬是轉回指到「整體array」可行嗎?如下
(char [4] * )pElement,轉完之後,pElement就變成pWhole了?
感恩。
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 220.135.250.104
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.250.104
※ 編輯: imbohn 來自: 220.135.250.104 (09/11 15:27)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章