关于char字符串的问题。 char arr[3]={'a','b','c'}; std::cout<<arr;//这里输

关于char字符串的问题。
char arr[3]={'a','b','c'};
std::cout<<arr;//这里输出有错误,不是地址。(void*)arr或&arr的话就正常输出。请问char字符串有什么特殊情况么,诚心请教。

你的数组越界了
char arr[3]={'a','b','c'};

字符数组最后必须多留一个给'\0'标识数组结束。
所以大小应该设定为4
char arr[4]={'a','b','c'};

还有你如果是想输出数组的地址,就必须传给他地址值,
std::cout<<arr 这样调用,编译器会解析为调用cout << (const char*)

std::cout <<(void*)arr或&arr 这样调用,编译器会解析为调用 cout<<(int)追问

在C++中没有越界,char*地址是默认不允许改变的么?

追答

不管是C还是C++已经越界了,你说的输出有错误,就是他把越界的数据输出出来了。
char* 指针的意思就是指向一个地址的指针。
你可以改变他指向的地址。
比如
char* p = NULL; // 指向空
char arr[4]={'a','b','c'};

p = arr; // 指向arr数组的首地址

追问

arr输出默认不是首地址?输出的是abc

arr输出默认不是首地址?输出的是abc


温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-23
//定义数组arr[3],实际上是三个变量arr[0],arr[1],arr[2](数组数字代表变量数...从0开始)
char arr[3]={'a','b','c'};
//输出是这样
for(int i=0;i<3;i++)
cout<<arr[i];
//至于(void*)arr和&arr,我知道&arr是取地址符
//数组在内存中的地址是连续的,&arr是默认读取arr[]数组中arr[0]的地址(第一个变量)
cout<<&arr;追问

char类型数组确实越界了

第2个回答  2016-05-23
cout<<std::arr;

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网