※ 引述《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)