看板 TransCSI 關於我們 聯絡資訊
※ 引述《deepdish (要和數學裝熟..)》之銘言: : 我先處理這題我覺得比較簡單 : : 台大90年度轉學考計概第五題 : 1 #include <iostream> : 2 using namespace std; : 3 : 4 int what( const char *s) : 5 { : 6 int j; : 7 for(j = 0; *s != '\0'; s++) : 8 ++j; : 9 return j; : 10 } : 11 : 12 int main() : 13 { : 14 char *st = {"this is a test."}; : 15 cout << what(st); : 16 system("pause"); // 這行只是把命令提示字元視窗暫停一下 : 17 return 0; : 18 } : : 這題的問題是字串的儲存與應用方式 : : 對於第六行的for裡 *s!='\0' s是指字串的開頭位置吧, *s指向字元位址 : : 所以12行的st就是傳一個位置給what函數, : : 但是 4行的定義是 const char *s 這不是字串嗎? : : 傳一個位置過去,卻用字串的定義接受??? : 嗯嗯 這很正常阿 傳記憶體位置 也可以定義位置裡面的資料型態 *s跟*st指向同一個記憶體位址 : : 還有,如果第六行的*s是單指一個字母,那怎樣才是整個字串?? : 14 行是利用雙引號 "" 以字串將指標 *st 初始化 : 在 main 中 st 就是整個字串 : 在 what 中 s 就是整個字串 : *s 代表指標 : 如果要知道真正的位置是用 &s *s是指標(取值),取址用s就可以了 字串(字元陣列): [t][h][i][s][ ][i][s][ ][a][ ][t][e][s][t][\0] '\0'是null字元,表示字串結束 空字元(space)是'\32',ASCII代碼是32或0x20 指標*st指向字串的第一個字元(陣列的第一個元素) 't' 然後把st(位址)傳給*s 所以*s指向 't' s++ 會使*s指向下一個字元 讀到null字元時離開迴圈 cout會輸出字串(字元陣列)中的字元(元素),以null字元判斷字串結束 另外 char st = 'c'; st表值,&st取址 char *st = "c++"; *st或st[]取值,st表址 char st[4] = "c++"; //有一個null字元 st[]或*st取值,st表址 (沒錯,陣列就是指標) st = st[0] st+1 = st[1] st+2 = st[2] st+3 = st[3] 有錯請指正,謝謝 ---- 今天第一次來到這個板 先恭喜開板 嗯... 我是五專生,明年要插大 請多多指教 -- 我的部落格 http://www.wretch.cc/blog/hsiehwei -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.143.164.92 ※ 編輯: hsiehwei 來自: 220.143.164.92 (06/10 21:49)