c++中指针的一点困惑

#include <iostream>using namespace std;int main(int argc, char *argv[]){ char xx[5]="hell"; int cc[4]={1,2,3,4 }; char *ic =xx; int * ii=cc; cout<<ii<<" "<<ic; return 0;}结果为 ii的是地址 ic 的是 hell为什么 指针不都是存的地址么
2026年09月25日 23:50
有4个网友回答
网友(1):

std::cout是std::ostream类的实例。std::ostream的流操作符operator<<有多个重载版本,可以在编译期根据参数类型的不同选择不同的操作。对于这里的ic,类型是char*(字符指针),重载的operator<<把它当作一个字符串的起始字符的指针,输出一个字符串。对于其它的非字符指针类型则输出它本身的值。顺便,字符串字面量" "的类型是char[3],这里隐式转换为char*类型的指针被输出。
如果要输出字符指针的值,可以先转换为其它指针类型或整数,例如cout << static_cast(ic)。也可以用C风格的输出函数:printf("%p",ic);。
====
[原创回答团]

网友(2):

这与cout的功能有关系,ii是整数数组首地址,ic是字符数组首地址,而对于cout函数来说,如果你直接让其输出一个字符指针,它默认是输出该指针指向的字符串,以上的cout语句相当于printf("%d %s",ii,ic); 你要想两个都输出地址可以用
printf("%d %d",ii,ic);
或
cout<

网友(3):

这个很难解答的。我翻过很多书和资料都没找到答案。
估计这是从祖上遗留下的问题。就当它就该是这样吧。

网友(4):

cout<<已重载,遇到字符串地址即输出字符串。