关于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)追问
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 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;