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

看板C_and_CPP作者 (http://0rz.tw/3BGhp)時間14年前 (2010/06/03 13:56), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《guam (小兄弟阿哲)》之銘言: : ※ 引述《stator (別急著吃棉花糖)》之銘言: : : 各位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是什麼呢? : : 謝謝 : http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B : "->" 的優先度高於"*" : 所以 *p->last_name 和 *(p->last_name) 是一樣的 : 而"*" 比"+"(addition )的優先度高 所以會先做* (已修改) : 也就是說 *p->last_name+1 == (*p->last_name)+1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 如果這是對的 : (*p->last_name) == last_name[0] == 'l' : 'l'+1 = 'm' (見ASCII表) 所以(b)為m : 而 *(p->last_name+2) == last_name[0+2] == u ^^^^^^^^^^^^^^^^ (p->last_name+2) == ((p->last_name)+2) 結果應該是這樣,不是嗎 == ((last_name[0])+2) 以舉陣來表示的話會是這樣吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.108.63.85

06/03 14:07, , 1F
你寫的 == 右邊的兩個並不相等, 下便那個是錯的,
06/03 14:07, 1F

06/03 14:08, , 2F
dereference是在最外層喔! Ex: char a[10];
06/03 14:08, 2F

06/03 14:09, , 3F
a[0] + 2 與 a+2 不會是一樣的東西, 甚至不是 a[0+2].
06/03 14:09, 3F

06/03 14:09, , 4F
而是 *(a+2) 某些情況下會等於 a[2].
06/03 14:09, 4F

06/03 14:10, , 5F
你 == 右邊的兩個甚至連型態都不一致....@_@"
06/03 14:10, 5F
※ 編輯: smallpig01 來自: 122.117.39.40 (06/03 23:11) ※ 編輯: smallpig01 來自: 122.117.39.40 (06/03 23:12)
文章代碼(AID): #1C1qG9Wa (C_and_CPP)
文章代碼(AID): #1C1qG9Wa (C_and_CPP)