C++中指针数组问题 定义的是指向字符的指针数组 为什么输出的又是整个字符串

charconst*month[n_months]={"January","February","March","April","May","June","July","... char const* month[n_months]={"January","February","March","April","May","June","July","August","September","October","November","December"};

int main()
{
for(int k=0;k!=n_months;++k)
std::cout<<month[k]<<":\t"<<std::endl;//输出是January: 等,整个自字符串
如果将*month[k]就只有首字母J:
return 0;
}
展开
 我来答
White_MouseYBZ
2015-09-28 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6387万
展开全部

为便于说明,把问题略为简化:“定义的是指向字符的指针,为什么能输出整个字符串”?

在C++中,cout << p;中的p如果是字符型指针,就被解释为“从这个指针的值(地址)开始,一个字节接一个字节地把其内容按ASCII码对应的字符输出到终端,直到遇到'\0'停止,且不输出'\0'“。下面的代码表明,当把一个int变量的地址强制为char *型时,cout <<也会把4字节的int数据按字节的ASCII值输出字符串,以证明前述分析的正确性:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include <iostream>
using namespace std;
int main(void){
    int a=6513249;
    cout << (char *)&a << ' ' << &a << endl;
    return 0;
}

输出是abc  xxxxxxxx(这是a变量的16进制地址,不同平台值会不同)。

注:a的值是精心选择的,使它的前3个字节的ASCII码刚好是abc,后一个是0,否则输出可能是乱码,这里只是在说明cout <<输出字符指针时的机制。后面的&a表明当指针不是字符型时则输出指针的地址值,以与前一个字符型指针的处理机制相对照。

beddy1
2012-11-22 · TA获得超过1988个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2183万
展开全部
char* 类型的cout 形为就是显示其指向的字符串的。month[k] 的类型为 const char * ,显示其内容是正常的。
而*month[k] 的类型为const char,得到的是对应字符串的第一个字符,所以结果就是 J F什么的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鼻行动物
2012-11-22 · TA获得超过100个赞
知道答主
回答量:65
采纳率:0%
帮助的人:51.5万
展开全部
这个数组元素明显是char*啊。 指向字符的指针数组是char const (*month)[n_months]
追问
char const (*month)[n_months]这个是数组指针吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
战火科技
2012-11-22 · TA获得超过221个赞
知道答主
回答量:114
采纳率:0%
帮助的人:79.5万
展开全部
当char *a="xxxxxxxx";
这个就是你数组中的一个元素吧?当使用cout<<a<<endl;时,输出的就是整个字符串。
当使用cout<<a[0]<<endl;或者cout<<*a<<endl;时,输出的级是字符串中第一个字母。
所以按照你的数组:你cout<<*month[k]<<endl;才是第一个字母J

C\C++中,当你给cout放一个字符指针的时候,它就一直输出,知道遇到\0这个结尾。而*month[K]是取值,它不是一个指针,所以输出单个值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimmy19871117
2012-11-22 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:130万
展开全部
char *s
s代表一个内存地址

std::cout << s of type char *
会解释为字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式