注册 登录
编程论坛 C++教室

[求助]字符串

xbw0114 发布于 2007-10-05 20:20, 795 次点击

char s[]="123\t456\00089",*p=s;
cout<<*(p+5)<<endl;
cout<<(p+5);
输出结果为什么是5和56呀~高手解释下哦~

11 回复
#2
animeo2007-10-05 20:26

前一个是一个元素,后一个是一个数组

#3
DieHeart2007-10-05 20:29
字符串一个个数过去(从0开始),*(p+5),就是s[5]=5
字符串默认到'\0'就结束了呀,所以从s[5]以后的串长度就只有56了
#4
xbw01142007-10-05 21:17
还是不太明白,能再说详细点吗???

[此贴子已经被作者于2007-10-5 21:33:16编辑过]

#5
xbw01142007-10-05 21:36
以下是引用DieHeart在2007-10-5 20:29:56的发言:
字符串一个个数过去(从0开始),*(p+5),就是s[5]=5
字符串默认到'\0'就结束了呀,所以从s[5]以后的串长度就只有56了//这句话怎么意思呀?

#6
xbw01142007-10-05 23:00
急哦~~有谁知道吗?
#7
aipb20072007-10-05 23:14
以下是引用xbw0114在2007-10-5 20:20:28的发言:

char s[]="123\t456\00089",*p=s; //p指向s的第一个字符
cout<<*(p+5)<<endl; //p做+5运算再解引用,123\t45(012345)得5
cout<<(p+5); //输出从当前指针指向的字符到\0(空字符)的字符串,得56
输出结果为什么是5和56呀~高手解释下哦~

#8
xbw01142007-10-06 00:02

我了~~

#9
夜子2007-10-06 15:29
\00089中是不是\0表示那个结束符号。剩下的0089四个数字是不是存在于数组中,但是要输出他们则必须用*(p+8)而不能cout<<p;呢?
#10
aipb20072007-10-06 15:58
回复:(夜子)\\00089中是不是\\0表示那个结束符号。剩...

实践出真知啊,我要是你就自己写写看。

#11
coding2007-10-06 18:35
首先,希望书写程序的时候要注意规范,即使C++比较自由的定义变量方式,
仍然要如此,这样增加程序的可读性,
其次,这个具体的问题中,要对字符串数组各指针的概念有所了解
char s[]="123\t456\00089";
char* p=s;
cout<<*(p+5)<<endl;
cout<<(p+5);
字符数组是从0指标开始的,字符串以NULL,或'\0'结尾
字符数组名是也是一个指针,但是是一个常量,
p=S,后,p的值即为字符串的首地址,P+5,也就是6个字符的地址,所以(P+5)实际上
一个32位地址值
#12
栖柏2007-10-06 18:52
cout<<(p+5);
为什么输出当前指针到\0的字符串,能把其中机理说一下么?
可以用汇编描述
1