关于字符串指针的问题。
来源:互联网 发布:查找数据的网站 编辑:程序博客网 时间: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
- 关于字符串指针的问题。
- 关于字符串指针的问题一
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串 字符数组 字符型指针的问题
- 关于字符串指针指向内容不能修改的问题
- 关于字符串指针初始化std::string的一个小问题
- 关于c语言字符串中sizeof指针的问题
- 关于指针的问题
- 关于指针的问题
- 关于指针的问题
- 关于指针的问题
- 关于指针字符串的知识
- 关于字符串指针的理解
- nyoj 840 吃花生
- struct和typedef struct彻底明白了
- java 数组实现向量
- [次小生成树] Prime Kruskal
- LeetCode122. Best Time to Buy and Sell Stock II
- 关于字符串指针的问题。
- 单点登录方案的比较和选择
- web select one to one link
- 线上Java应用排查和诊断规范
- bzoj3289 : Mato的文件管理
- 各种 Java Thread State 第一分析法则
- HDOJ 2680 Choose the best route (Dijstra 多个起点)
- 三个实例演示 Java Thread Dump 日志分析
- LeetCode123. Best Time to Buy and Sell Stock III