关于字符串指针的问题。

#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时会输出ello
cout << &p时会输出字符串首地址 

这是改成*p时的运行结果,Microsoft Visual C++ 6.0编译通过
输出的字符串为:H
Press 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;
}
输出结果:
hello
hello
0012FF70
0012FF7C
Press any key to continue
不是一个地址

下面是谭浩强老师书中的解释
给出字符指针变量,则系统先输出它所指向的一个字符数据,然后自动加1,使之指向下一个字符,然后再输出一个字符,如些直到遇到字符串结束标志‘\0’为止。
通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能企图通过数组名输出它的全部元素的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值