数组指针的问题???

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:01:55
char *name[]={"asdf","qwer","zcvv"};
char **p;
p=name;

请问这段小程序 cout<<*p<<**p<<*p+1<<**p+1<<endl;
分别输出什么 并详细解释一下
**p+1 输出的是98 怎么样让他输出b

楼上大部分是正确的,但是有错。
cout<<*p<<**p<<*p+1<<**p+1<<endl;
*p输出asdf没错
**p输出a没错
*p+1 这里是*p指向asdf +1指向sdf没错。
**p+1 **p指向的是a,是char . + 1是int 那么系统会把a转化成int型97
所以最后的输出应该是98才对,也就是a的ASCII码+1.
由于中间没有输出空格和换行,所以最后应该输出是:

asdfasdf98

看了你的补充,再补下:
要输出b只需要这样:
cout<<*p<<**p<<*p+1<<(char)(**p+1)<<endl;

依次会输出
asdf
a
sdf
b
name为数组名则*p为数组的第一个元素即是一个字符串指针
**p就是该字符指针所指串的第一个字符
值得说一下的就是这个*p+1 由于*p为字符指针则*p+1就是将该指针向后移动一个字符的字节 即一个字节 所以他就是sdf
后者就没什么说的了