关于字符串指针的问题。

来源:互联网 发布:查找数据的网站 编辑:程序博客网 时间:2024/05/08 19:49
#include <iostream.h>class character{private:char * p;public :character(char * p){this->p = p;}void display(){cout<<"输出的字符串为:"<<p<<endl;}};int main(void){char * p = "Hello"; character ch(p);ch.display();return 0;}cout<<"输出的字符串为:"<<p<<endl;请问这个地方输出字符串的时候为什么不是 * p了? 指针变量p不是存放的是字符串Hello的首地址吗? * p 应该才是字符串的内容啊。 我认为应该写成 cout<<"输出的字符串为:"<< *p <<endl; 但这样会报错。
解答:
你改成*p不会报错,输出的会是Hello的第一个字母H,因为p是字符串的首地址,加*就是第一个字符的内容,即H你对字符串指针的了解不够,在输出时,p代表整个字符串,即cout << p时会输出字符串的内容,即Hello,cout << p +1时会输出ellocout << &p时会输出字符串首地址 这是改成*p时的运行结果,Microsoft Visual C++ 6.0编译通过输出的字符串为:HPress any key to continue
追问:
既然p是字符串的首地址,那输出cout<<p时应该输出的是地址啊。为什么会输出整个字符串?
追答:
字符串数组和整型数组是不太一样的,输出时p代表的是整个字符串,你要输出地址只能用&p,我现在也不是很确认&p是不是就是p的首地址,因为我用c语言printf("%p",p)输出的内容和cout << &p输出的内容差了那么一点代码:#include  <iostream>using namespace std;#include <stdio.h>void main(){char *sp,s[10] = "hello";sp = s;cout << sp << endl;printf("%s\n",sp);printf("%p\n",sp);cout << &sp << endl;}输出结果:hellohello0012FF700012FF7CPress any key to continue不是一个地址下面是谭浩强老师书中的解释给出字符指针变量,则系统先输出它所指向的一个字符数据,然后自动加1,使之指向下一个字符,然后再输出一个字符,如些直到遇到字符串结束标志‘\0’为止。通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能企图通过数组名输出它的全部元素的。

1 0
原创粉丝点击