[問題] C的指標和陣列

看板C_and_CPP作者 (Mistel)時間4年前 (2020/03/03 16:27), 4年前編輯推噓3(305)
留言8則, 4人參與, 4年前最新討論串1/1
hi,想問一點比較初階的東西,看看自己的理解對不對 問題描述: https://i.imgur.com/bnSFVCv.jpg
如果我這樣宣告: int a[10]; 這時候單純看a這個變數其實就是一個指向叫做a的整數陣列指標,沒錯嗎? 我原本以為a會在記憶體上的其他位置,然後像指標一樣指向陣列的起始位址 像下圖這樣: https://i.imgur.com/n7OTGZq.jpg
但實際測試過後才知道a這個指標就位在陣列的起始位址 那我的問題是: 1.a是一個指標嗎?不然為什麼compiler會警告我a是一個 int *的參數呢? 2.如果我做下列動作 print ("%x", a) 也確實print出陣列的起始位址了,那不是代表a的記憶體地址內的資料確實是陣列的起始位 址嗎? 那這樣a[0]是存的東西為什麼不是陣列的起始地址? 以上兩個感覺有點初階的東西,但小弟一直想不透,懇請板友指點,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.50.38 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1583224068.A.FC6.html

03/03 16:44, 4年前 , 1F
你可以參閱stackoverflow上的這一則:
03/03 16:44, 1F

03/03 16:44, 4年前 , 2F
03/03 16:44, 2F
感謝你!

03/03 17:26, 4年前 , 3F
請參考 jserv 指標篇
03/03 17:26, 3F
好的,小弟會去參考 沒想到在這邊也能看到p大! ※ 編輯: mistel (114.136.50.38 臺灣), 03/03/2020 18:33:48

03/04 01:59, 4年前 , 4F
你可以把陣列(例如int a[10]的a)當成指標"常數"
03/04 01:59, 4F

03/04 02:00, 4年前 , 5F
意思就是他是一個指標,但是你不能去改他的位址
03/04 02:00, 5F

03/04 02:00, 4年前 , 6F
然後他的值是compiler會自動給值,不用像一般指標變數
03/04 02:00, 6F

03/04 02:01, 4年前 , 7F
要用malloc這類指令去取得位址
03/04 02:01, 7F

03/06 02:14, 4年前 , 8F
推jserv大神
03/06 02:14, 8F
文章代碼(AID): #1UNXK4_6 (C_and_CPP)