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

[求助]字符串,指针问题

夜子 发布于 2007-10-06 16:01, 612 次点击


#include<iostream>
#include<string>
using namespace std;
int main()
{

char s[]="123\t456\06589",*p=s; //p指向s的第一个字符,\t是一个字符
cout<<*(p+5)<<endl; //p做+5运算再解引用,123\t45(012345)得5
cout<<(p+5)<<endl;
cout<<strlen(p)<<endl;
cout<<sizeof(s)<<endl;
cout<<sizeof(p)<<endl;
cout<<sizeof(*p)<<endl; //strlen(s)为2个,因为\0原因sizeof(s)不考虑中间的\0的截断


cout<<(p+8);
return 0;
}
请大家帮忙看下这些输出结果是怎么得来的。谢谢了哦

7 回复
#2
snipered2007-10-08 16:16
我只看的出值为假。
顶上去再说!
#3
风之梦2007-10-08 20:06
    偶也不明白呀
#4
风之梦2007-10-08 20:09
但是如果把那两个转义字符给去掉,我就明白了,你回去把转义字符复习一下
#5
rediums2007-10-08 20:27
char s[]="123\t456\06589"
\065 代表数字5,所以上面这句可以写成:char s[]="123\t456589"
#6
reedleaf2007-10-08 22:37

#include<iostream>
#include<string>
using namespace std;
int main()
{

char s[]="123\t456\06589",*p=s; //p指向s的第一个字符,\t是一个字符
cout<<p<<endl; //输出:123 456589
// \t Horizontal tab
// \ooo ASCII character in octal notation
//所以 \065(八进制) 查ASCII表输出5
//上面理解了,以下就简单了
cout<<*(p+5)<<endl; //p做+5运算再解引用,123\t45(012345)得5
cout<<(p+5)<<endl;
cout<<strlen(p)<<endl; //不考虑'\0'
cout<<sizeof(s)<<endl;
cout<<sizeof(p)<<endl; //p为指针 所以输出4
cout<<sizeof(*p)<<endl; //*p为字符 输出1


cout<<(p+8);
return 0;
}

#7
夜子2007-10-11 12:59
呵呵。多谢阿。
#8
jonc2007-11-02 17:04

路过
学习学习
顶下

1