Re: [問題] 很初級的指標問題

看板C_and_CPP (C/C++)作者 (sunlights)時間13年前 (2012/11/07 18:35), 編輯推噓4(4018)
留言22則, 10人參與, 最新討論串3/3 (看更多)
問題 : (1) int *p; : p = 300; : (2) char *p; : p = "abcd"; : (3) int *p; scanf("%d",p); : (4) char *p; scanf("%s",p); : (5) int *p=300; : (6) char *p="test"; 一般書上寫法 : int *p; : int i = 0; : p = &i; 看了精彩的回文和大家的推文.. 我發現一個道理.. 就是只要是常數被放在指標變數p的右邊.. 指標就不能用*p改變它的值了..但是可以讀出那個常數 這就是(1),(2),(5),(6)可以的原因.. 而一般書上寫法的話是把變數指定給指標變數p所以就可以用*p改變值 不知道上面黃色字是否正確?? 現在比較迷惘的就是為什麼int *p 右邊等於int常數就是把int常數當位址給p.. 右邊等於字串常數就是把字串第一個字元的位址給p?? 還有是不是反正指標就是不能用scanf,只能用=或是其他函數給呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.31.218 ※ 編輯: sunlights 來自: 111.240.31.218 (11/07 18:35)

11/07 18:38, , 1F
不完全對
11/07 18:38, 1F

11/07 18:39, , 2F
要記著指標存的是記憶體位址, 位址當然可以隨便填, 但能
11/07 18:39, 2F

11/07 18:40, , 3F
不能用是另一回事...
11/07 18:40, 3F

11/07 18:40, , 4F
有了地址/門牌號碼還得有鑰匙才進得去房子裡
11/07 18:40, 4F

11/07 18:43, , 5F
你講的是結果和現象,而不是背後的原因和觀念
11/07 18:43, 5F

11/07 18:44, , 6F
你寫的"abcd"在編譯器眼裡其實是 {'a','b','c','d','\0'}
11/07 18:44, 6F

11/07 18:45, , 7F
編譯器會幫你找個地方把這5個char放進去, 然後給你第一個
11/07 18:45, 7F

11/07 18:45, , 8F
字元的位址
11/07 18:45, 8F

11/07 19:02, , 9F
int *p; 這一行的意思是宣告變數 p 為整數的指標。
11/07 19:02, 9F

11/07 19:04, , 10F
*p = 300; 這一行的意思是將 p 所指的整數設為 300。
11/07 19:04, 10F

11/07 19:05, , 11F
* 在不同地方有不同意義,一個是表示宣告的對象是指標
11/07 19:05, 11F

11/07 19:06, , 12F
一個是對指標變數 dereference
11/07 19:06, 12F

11/07 19:07, , 13F
不知道原 PO 是不是把這兩種用途搞混了。
11/07 19:07, 13F

11/07 20:18, , 14F
再拿 james732 的置物櫃比喻來說 你隨手寫一個號碼
11/07 20:18, 14F

11/07 20:19, , 15F
碰中可以給你用的櫃子的機會很低 但並不是不會
11/07 20:19, 15F

11/07 20:58, , 16F
這系列程式碼不完整很容易誤導新手 我以前也深受其害
11/07 20:58, 16F

11/08 17:28, , 17F
我原PO的推文裡有人建議不要用dev c++ 那什麼工具比較好
11/08 17:28, 17F

11/08 17:45, , 18F
Code::Blocks
11/08 17:45, 18F

11/08 17:49, , 19F
windows: vs mac:xcode linux:gcc
11/08 17:49, 19F

11/08 20:08, , 20F
樓上..vc有很多版本??那一個最好呢??
11/08 20:08, 20F

11/08 21:40, , 21F
VC6 可以再戰十年,你覺得呢
11/08 21:40, 21F

11/09 22:09, , 22F
學習的話衝最新的就對了
11/09 22:09, 22F
文章代碼(AID): #1GcZbe_d (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GcZbe_d (C_and_CPP)