作者fanntone (我是胖子)
看板C_and_CPP
標題Re: [問題] 指標相關問題
時間Mon Jul 21 23:26:54 2014
※ 引述《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
→ Killercat:其實多加個const就可以過了 不過那是C/C++特例的妥協XD 07/22 01:16
→ scwg:加了 const 就不能傳進 reverse(), 參數加 const reverse() 07/22 02:42
→ scwg:裡就不能寫進 s[i] = s[j]. 重點是 "ABC" 是個 constant 07/22 02:43
→ Killercat:可以傳進去啊 做strcpy處理就好 07/22 05:27
→ Killercat:啊 他進出用同一個參數....哎那就沒戲了 XD 07/22 05:28
→ blackwindy:type casting 07/22 12:53
→ blackwindy:喔沒事 看錯 以為是const char*跟char*的問題 07/22 13:04
→ karose:char *s1 = "ABCDEFG";宣告沒有問題,問題是這string是const 07/23 13:40