看板 C_and_CPP 關於我們 聯絡資訊
各位c語言前輩好 小弟在寫考古題時遇到幾題問題,希望能請各位前輩指教 struct student{ char *last_name int student_id char grade; }; struct student tmp, *p=&tmp; tmp.grade='A'; tmp.last_name="laugero"; 則下列運算結何者錯誤? (a)tmp.last_name為Laugero (b)*p-->last_name+1為a (c)*(p-->last_name+2)為u 答案是b 想請問b和c有什麼不一樣呢? 我知道的是*p-->last_name是看第一個字母為L,那p-->last_name+2是什麼呢? 謝謝 ======================================================================== 第二題 有一片段程式如下: int i[]={10,20,30,40,50}; int *ptr=i+2 請問下列敘述何者錯誤? (a)ptr[0]==30 (b)*(ptr+1)==40 (c)*(i+1)=20 (d)ptr[-1]==20 (e)i[5]==50 答案是e 沒有問題 請問a和d要怎麼看呢?? 題目是說ptr指標的內容=i+2的陣列內容 請各位前輩能指點說明。謝謝 ======================================================================= 第三題 在C語言中,char *p='struct',請問*p+2為? 答案是r 請問這和第一題要怎麼分辨呢???為什麼不是將第一個字母的s+2個變成u -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.44.55
nowar100:1. *p.last_name+1為a吧,我記得*比.早做 (印象中) 05/30 09:58
nowar100:阿不對,問題應該是在於 你現在已經dereference以後再+1 05/30 10:00
nowar100:所以他加的是把字元L加1 05/30 10:00
nowar100:2. ptr只到的就是30那一格,選項全部都用指標前後移動來 05/30 10:01
nowar100:想就可以了 05/30 10:02
nowar100:a)就是ptr那一格的值 d)就是ptr前一格的值 05/30 10:02
※ 編輯: stator 來自: 61.62.44.55 (05/30 10:15)
stator:謝謝n大,我又加了第三題,您剛剛說的dereference是什麼呢? 05/30 10:15
stator:第三題要怎麼和第一題來做分辨呢? 05/30 10:15
nowar100:你確定3.是r? 我試過是u阿 dereference就是已經把指標 05/30 10:37
nowar100:拿去取他指向的值了 中文好像是翻作"提領指標" 05/30 10:37
nowar100:char* p="struct"; printf("%c", *p+2); // 'u' 05/30 10:38
nowar100:*(p+2) 才會是 'r' 05/30 10:39
stator:原來如此,謝謝n大的解說~ 05/30 10:49
rocmewtwo:如果有興趣,可以進一步研究二維陣列與指標關係 05/30 11:38
rocmewtwo:這樣觀念會更清楚 05/30 11:38
LoveBeef:請問是什麼考古題? 05/30 13:18
jasonfghx:push 06/01 14:47