作者hsiehwei (开心最重要啦!!)
看板TransCSI
标题Re: [问题] 程式:C++ 台大90 第五、六题
时间Fri Jun 10 21:46:04 2005
※ 引述《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)