字符型指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:54:16
char *p;
char f[]="abcde";
p=f;
cout<<*p<<endl;
cout<<p<<endl;

为什么输出的*p是a,输出的p是abcde?
p不是一个地址了吗?为什么输出p会是字符串?

*p是一个char型指针,f[]是一个字符串。p=f就是将字符串f的首地址赋给p,我们暂且把这个首地址成为地址A;
因此cout<<*p的结果就是字符串的第一个字符。
cout<<p就是输出以地址A为首地址的字符串,遇到\0就结束。所以如果写成cout<<f的话结果也是一样的。
这句就相当于c语言中的printf("%s",p);这条语句的意思不就是从P指向的地址开始输出一个字符串吗。。明白了吗?

你想的是对的,但是cout这个输出类呢就不是按你想的来输出了
你把他换成
printf试试就可看到p的确是个地址。。。
printf("%x\n",p);
和cout<<&f<<;一样

p定义的是char的指针。
当使用*p时,因为一个char是一个字节,所以输出的只有一个字节长。
p指向的是f[]字符串,所以输出的是整个f[]。

P和f可以看作等价,a b c d e 分别储存在不同的内存单元即不同的地址,
f为首地址,*f表示首地址的内容,cout<<p即输出字符串,试和C语言比较,
printf("%c",f[0])->cout<<*f;printf("%s",f)->cout<<f;

p不是一个地址!*p是p所在的位置的值,而由p=f,并且f[]=abcd,所以p=abcd,就是字符串咯!
这样回答你能理解吧?