[問題] 陣列宣告的寫法

看板C_and_CPP (C/C++)作者 (henry)時間13年前 (2012/08/08 16:32), 編輯推噓4(4016)
留言20則, 6人參與, 最新討論串1/1
想請問一個有關陣列宣告的問題 1. int a[10]; 2 int (*b)[10]; 以上兩種都是宣告存有10個int的陣列 但是b宣告時候用了 point 請問這樣 a 和 b 有什麼基本上的差別 或是各有什麼優劣嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.14.188

08/08 16:39, , 1F
好新的語法,兩種我都沒學過
08/08 16:39, 1F

08/08 16:53, , 2F
XD 寫錯了 我改一下
08/08 16:53, 2F
※ 編輯: henry74918 來自: 122.116.14.188 (08/08 16:53)

08/08 17:26, , 3F
第二種是定義指標, 沒有任何陣列被定義, 用來指向第一
08/08 17:26, 3F

08/08 17:27, , 4F
種, 就如同 int a; int *b; 一樣的關係
08/08 17:27, 4F

08/08 17:27, , 5F
2是pointer to int[10] 意思不一樣阿
08/08 17:27, 5F

08/08 17:33, , 6F
所以第2種不會真的宣告陣列嗎?
08/08 17:33, 6F

08/08 17:37, , 7F
我寫code測試 sizeof(*b)=40 還是這不能代表什麼?
08/08 17:37, 7F

08/08 17:39, , 8F
其實我不是很懂陣列名稱所代表的意思 是指向一塊連續
08/08 17:39, 8F

08/08 17:39, , 9F
記憶體空間的指標嗎?
08/08 17:39, 9F

08/08 17:45, , 10F
不是喔,陣列名單純屬一個識別項,讓你識別該陣列用的。
08/08 17:45, 10F

08/08 17:46, , 11F
只不過拿這個識別項,進入 "運算式" 時,除非碰到 sizeof
08/08 17:46, 11F

08/08 17:47, , 12F
或 address of 運算子,否則一律當成等價的指標進行運算
08/08 17:47, 12F

08/08 17:52, , 13F
sizeof 告訴你那個 expr 型態的大小, 而不是真的去
08/08 17:52, 13F

08/08 17:52, , 14F
dereference
08/08 17:52, 14F

08/08 17:52, , 15F
換成一個 pointer to a struct 也是一樣的, 並沒有定
08/08 17:52, 15F

08/08 17:53, , 16F
義該型別變數
08/08 17:53, 16F

08/08 18:56, , 17F
typedef int(Array)[10]; Array a; Array* b; 大概是這樣吧
08/08 18:56, 17F

08/08 23:52, , 18F
可以參考 #1G5DqWPJ 描述的right-left rule原則
08/08 23:52, 18F

08/08 23:52, , 19F
int (*b)[10] 的symbol解析順序是 * [10] int
08/08 23:52, 19F

08/08 23:53, , 20F
英文則是"b is a pointer to an array of 10 ints"
08/08 23:53, 20F
文章代碼(AID): #1G8YGhce (C_and_CPP)
文章代碼(AID): #1G8YGhce (C_and_CPP)