下面的C++程序中,为什么cout<<p; 和cout<<*p;结果不同呢?这两者有什么区别呢?

#include<iostream>usingnamespacestd;voidmain(){char*p;p="123456";cout<<p<<endl;cout<<... #include<iostream>
using namespace std;
void main(){
char *p;
p="123456";
cout<<p<<endl;
cout<<*p<<endl;
}
展开
 我来答
arongustc
科技发烧友

2012-07-14 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:5855万
展开全部
前者输出的是p的内容,cout的重载函数确保输出的是字符串
后者输出的是*p,这是一个字符'1',
两者当然不同,不知道lz为什么认为他们应该一样
135429617
2012-07-14 · 超过32用户采纳过TA的回答
知道答主
回答量:158
采纳率:0%
帮助的人:92万
展开全部
p本身是个指针,就是个地址,*p是p所指向的地址中存储的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seeyou后
2012-07-14
知道答主
回答量:6
采纳率:0%
帮助的人:9402
展开全部
p是变量的地址,而(*p)就等价于你赋予的那个值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d7d5587
2012-07-14 · TA获得超过814个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:124万
展开全部
前者是输出的是变量的地址,后者是变量的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
newman_7
2018-04-18
知道答主
回答量:2
采纳率:0%
帮助的人:1284
展开全部
因为p是字符型指针,所以*p应保证输出一个它所指的字符;
但p的输出含义被改成了输出它所指的字符串内容(本来应该输出字符指针的值,即地址),目的是为了输出字符串方便,字符型数组也类似。但这种操作与其他类型指针输出的不一致性,造成了c语言内部的混乱,给学习和理解带来了障碍。这种为了方便性,而忽视语言的一致性的设计在c语言中不止一处,就是c/c++语言的难学的原因之一,也是c程序中隐藏的错误难调、多发原因。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式