Re: [問題] 指標相關問題

看板C_and_CPP作者 (我是胖子)時間11年前 (2014/07/21 23:26), 編輯推噓0(008)
留言8則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《exprission (安安你好幾歲住哪)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : C : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 程式沒有辦法順利執行 : 餵入的資料(Input): : 預期的正確結果(Expected Output): : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : #include <stdio.h> : #include <stdlib.h> : #include <string.h> : void reverse(char *s) { : int i, j; : char c; : for (i = 0, j = strlen(s) - 1; i < j; i++, j--) { : c = s[i]; : s[i] = s[j]; : s[j] = c; : } : } : int main(void) { : char *s1 = "ABCDEFG"; 就純粹宣告指標來說 等號的右邊應該是一個位置(address) 所以你這樣宣告怎樣會對呢? 當然了解我們了解你是要宣告一個字元陣列(字串) 所以你要先宣告一個陣列 ex: char s1[] = "ABCDEFG"; 而s1就指向陣列開頭的第一個位置 因此就不需要再另外宣告一個指標來指向他了 如果要列印陣列內的值 ex: for(int i = 0; i<7; i++) { printf("Array[%d]=%d\n",i,*(s1+i)); } : reverse(s1); : return 0; : } : 補充說明(Supplement): : 這是小弟最近在練習指標時,在網路上找到的一個題目, : 只要把char *s1 = "ABCDEFG"; 改成char s1[]= "ABCDEFG"; 就可以執行了, : 不過想不到原因,麻煩各位高手們幫忙解決我的疑問,謝謝了。 -- 錢是汗水的報償 智慧的結晶 能力的證明 它更是一種尊嚴 更是一種肯定 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.14.174 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405956419.A.5B0.html

07/22 01:16, , 1F
其實多加個const就可以過了 不過那是C/C++特例的妥協XD
07/22 01:16, 1F

07/22 02:42, , 2F
加了 const 就不能傳進 reverse(), 參數加 const reverse()
07/22 02:42, 2F

07/22 02:43, , 3F
裡就不能寫進 s[i] = s[j]. 重點是 "ABC" 是個 constant
07/22 02:43, 3F

07/22 05:27, , 4F
可以傳進去啊 做strcpy處理就好
07/22 05:27, 4F

07/22 05:28, , 5F
啊 他進出用同一個參數....哎那就沒戲了 XD
07/22 05:28, 5F

07/22 12:53, , 6F
type casting
07/22 12:53, 6F

07/22 13:04, , 7F
喔沒事 看錯 以為是const char*跟char*的問題
07/22 13:04, 7F

07/23 13:40, , 8F
char *s1 = "ABCDEFG";宣告沒有問題,問題是這string是const
07/23 13:40, 8F
文章代碼(AID): #1JpJ53Mm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1JpJ53Mm (C_and_CPP)