[問題] 關於c語言指標的問題

看板C_and_CPP作者 (別急著吃棉花糖)時間14年前 (2010/05/30 09:56), 編輯推噓4(4013)
留言17則, 5人參與, 最新討論串1/3 (看更多)
各位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

05/30 09:58, , 1F
1. *p.last_name+1為a吧,我記得*比.早做 (印象中)
05/30 09:58, 1F

05/30 10:00, , 2F
阿不對,問題應該是在於 你現在已經dereference以後再+1
05/30 10:00, 2F

05/30 10:00, , 3F
所以他加的是把字元L加1
05/30 10:00, 3F

05/30 10:01, , 4F
2. ptr只到的就是30那一格,選項全部都用指標前後移動來
05/30 10:01, 4F

05/30 10:02, , 5F
想就可以了
05/30 10:02, 5F

05/30 10:02, , 6F
a)就是ptr那一格的值 d)就是ptr前一格的值
05/30 10:02, 6F
※ 編輯: stator 來自: 61.62.44.55 (05/30 10:15)

05/30 10:15, , 7F
謝謝n大,我又加了第三題,您剛剛說的dereference是什麼呢?
05/30 10:15, 7F

05/30 10:15, , 8F
第三題要怎麼和第一題來做分辨呢?
05/30 10:15, 8F

05/30 10:37, , 9F
你確定3.是r? 我試過是u阿 dereference就是已經把指標
05/30 10:37, 9F

05/30 10:37, , 10F
拿去取他指向的值了 中文好像是翻作"提領指標"
05/30 10:37, 10F

05/30 10:38, , 11F
char* p="struct"; printf("%c", *p+2); // 'u'
05/30 10:38, 11F

05/30 10:39, , 12F
*(p+2) 才會是 'r'
05/30 10:39, 12F

05/30 10:49, , 13F
原來如此,謝謝n大的解說~
05/30 10:49, 13F

05/30 11:38, , 14F
如果有興趣,可以進一步研究二維陣列與指標關係
05/30 11:38, 14F

05/30 11:38, , 15F
這樣觀念會更清楚
05/30 11:38, 15F

05/30 13:18, , 16F
請問是什麼考古題?
05/30 13:18, 16F

06/01 14:47, , 17F
push
06/01 14:47, 17F
文章代碼(AID): #1C0SNYXx (C_and_CPP)
文章代碼(AID): #1C0SNYXx (C_and_CPP)