[問題] 指標無法用 *pi = &ival2 的方式賦值

看板C_and_CPP作者 (岩琦薰)時間12年前 (2013/05/12 18:44), 編輯推噓0(0018)
留言18則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) None 問題(Question): int ival = 1024, ival2 = 2048; int *pi = &ival, *pi2 = &ival2; *pi = &ival2; 為什麼宣告可以這樣寫,但第三行卻不行呢? 錯誤結果(Wrong Output): error C2440: '=' : cannot convert from 'int *' to 'int' 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.246.22.161

05/12 18:48, , 1F
你的錯誤結果已經告訴你了 等號左邊是int 右是 int *
05/12 18:48, 1F

05/12 18:48, , 2F
pi=&ival2這樣才對. pi是指標, *pi是解參照.
05/12 18:48, 2F
謝謝樓上倆位解答,我知道要 *pi = ival2 或 pi = &ival2 才會過 ,但我還是不懂為什麼宣告可以這樣寫卻不會錯 ※ 編輯: memory6610 來自: 111.246.22.161 (05/12 18:59)

05/12 19:14, , 3F
啊...宣告時那個你可以看作是型態之一
05/12 19:14, 3F

05/12 19:15, , 4F
啊...宣告時那個`*' 你可以看作是型態之一
05/12 19:15, 4F

05/12 19:27, , 5F
宣告的地方是指pi的資料型態為int*,把&ival的值給pi
05/12 19:27, 5F

05/12 19:28, , 6F
不是*pi=&ival
05/12 19:28, 6F

05/12 20:10, , 7F
語法就這樣規定
05/12 20:10, 7F

05/13 18:37, , 8F
error 訊息已經說得這麼明白,你還看不懂...
05/13 18:37, 8F

05/13 18:38, , 9F
你若想硬塞也是可以,就強制轉型後再塞吧!
05/13 18:38, 9F

05/14 12:21, , 10F
http://ppt.cc/mIQ3 你的問題在第一點有解譯了。
05/14 12:21, 10F
看了樓上的解答大概了解我的問題了 但有人知道語法為什麼這樣規定嗎? 有相關的書可以看嗎? ※ 編輯: memory6610 來自: 111.246.6.180 (05/14 14:02)

05/15 02:36, , 11F
程式語言的東西很多叫「規範」,和律師背法律條文沒兩樣.
05/15 02:36, 11F

05/15 02:37, , 12F
如果你要找的是那本厚厚的規範,有,但一般人不會想去看.
05/15 02:37, 12F

05/15 04:18, , 13F
那是語法規則。有平台是指標跟資料不能相互參考的
05/15 04:18, 13F

05/15 04:19, , 14F
無法接受的話就改去用弱型別的語言或編譯器吧
05/15 04:19, 14F

05/15 04:22, , 15F
ex:CUDA沒UVA時你不能用整數取指標的位址 因為沒cvta指令
05/15 04:22, 15F

05/15 04:23, , 16F
OpenCL也不能,且不能兩個不同位址空間的指標交換參考
05/15 04:23, 16F

05/15 04:24, , 17F
global pointer不能assign pointer to local/private
05/15 04:24, 17F

05/15 04:25, , 18F
上述兩者是規範及限制。你就得遵守這前提去寫
05/15 04:25, 18F
文章代碼(AID): #1HZtAgXG (C_and_CPP)