c/c++中数组和指针

来源:百度知道 编辑:UC知道 时间:2024/05/16 11:59:32
我想问:
在 数组 int a[]={1,2,3,4} 中a是一个指向a[0]的指针(地址),但如果你使用
cout<<a<<endl;,但其结果不是一个指针(地址);还如char s[5]={'a','b','c'}; cout<<s<<endl;,结果是abc.更不是地址.
这是怎么回事,请大家帮帮忙....谢谢!!!

C/C++ 的基本数据类型中没有字符串,但是 C/C++ 的输入输出库中提供了基于字符指针(或字符数组)的字符串输入输出支持。在C语言中,使用 scanf 和 printf 支持字符串的输入输出;而 C++ 中,则使用 cin 和 cout 实现基于控制台的输入输出。在字符数组的输出中,只是将字符数组元素的首地址及其之后的所有地址对应的字符依次输出。同样的,如果指定了后面的字符指针,则将那个字符指针及其之后的所有字符依次输出。字符串指针(或字符数组)的最后一个字符之后还有一个字符'\0'作为结束标志。

C++ 中的 cout 通过运算符重载实现不同类型的输出支持。以上代码 cout<<s<<endl; 中,cout 将根据指针类型进行判断,由于变量s是字符数组指针,因而 cout 将认为你要输出字符串,因而依次输出了所有对应字符。
如果你需要输出以上字符数组的整数地址,可以使用

printf("%x",s); // 输出 s (即 &s[0]) 的十六进制内存地址。

或者使用
cout<<hex<<s<<endl;

你用的是cout是C++的范畴,而cout是打印到屏幕的意思 这样当然显示的是abc啦 还要怎么说 个人理解仅供参考