[轉錄]C語言的小問題

看板C_and_CPP (C/C++)作者時間16年前 (2009/09/11 15:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
簡單的小問題。主要是確認是否正確。問題就是有?的地方。 題目: 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)
文章代碼(AID): #1AgVlIZx (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AgVlIZx (C_and_CPP)