Re: [問題] C語言關於陣列位置的問題

看板Programming作者時間11年前 (2014/05/21 00:09), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《takeabreak2 (小林)》之銘言: : 大家好 : 小弟這兩天才注意到一個問題 : 困擾了很久一直想不通 : int a[5]={0,1,2,3,4}; : printf("%X", a); //印出a的內容:3B241EA0 : printf("\n"); : printf("%X", &a); //印出a的位置:3B241EA0 : printf("\n"); : printf("%d", *a); //印出a所指的位置的內容:0 : 註解是我對程式碼的理解 : 如果a的位置和內容相同 : 那a不是指向自己了? *a怎麼會是0? : 大學用C語言寫了四年 : 第一次注意到這件事...... 我覺得還是要補充一下 array name代表array第一個元素的位置 是compiler自行產生的值,而且是一個不可修改的"左值" 不是右值喔,因為&運算子不可作用於右值,但可以作用於array name 另外要考慮型別 以下語句在C會過但有warning,而在C++會fail int arr[3]; int (*pa1)[3]=arr; //要改成int (*pa1)[3]=&arr 因為arr是"第一個元素"的位置,第一個元素的型別是int* 故arr的型別也是int* 而&arr的型別是int(*)[3] &作用於array name時,要考慮array的"整個"型別,而非第一個元素的型別 因為此時arr沒被轉成pointer,如果arr再被轉成pointer,那&arr就變成指標的指標(X) C不會像C++對型別那麼嚴格,所以只產生warning 也就是說&arr只有值等於arr,型別並沒有 再來考慮多維陣列,C/C++沒有多維陣列,只有陣列的陣列 int brr[2][3]; int (*pb1)[2][3]=&brr; //指向整個array的指標 int (*pb2)[3] =brr; //指向第一個元素的指標 pb2指向brr的第一個元素,此元素也是陣列=>{1,2,3} 希望對你有幫助,如果有錯也請多指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.54.97 ※ 文章網址: http://www.ptt.cc/bbs/Programming/M.1400602190.A.1AF.html
文章代碼(AID): #1JUtvE6l (Programming)
文章代碼(AID): #1JUtvE6l (Programming)