ostream类重载了operator<<()以识别不同的类型,如:
int    short        long        unsigned int    unsigned short    unsigned long
float    double       long double     char         signed char     unsigned char
这样cout就不用像C语言中的printf那样需要程序员自行匹配数据类型,如:printf("%s%d%f","hello world",32,3.1415)

由于C++用指向字符串位置的指针来表示字符串,因此ostream类重载了char型指针类型的插入运算符<<,即:
ostream& operator<<(void*);
ostream& operator<<(const char*);
ostream& operator<<(const signed char*);
ostream& operator<<(const unsigned char*);
后三种形式分别接受3种char型常指针,输出char型常指针指向的内容,直到遇到字符串结束符'\0',如:
char *ch1="hello world"
char ch2[12]="hello world"
cout<<ch1<<ch2<<endl;
即会调用两次ostream& operator<<(const char*)
而第一种形式则是用来输出任何类型的地址,如:
int a=3;
cout<<&a<<endl;
就会调用ostream& operator<<(void*)来输出a的地址。
由于字符串是指向第一个字符的指针,因此要获取字符串的地址,就需要将char*型指针强制转换为void*,然后才能调用operator(void*)来
输出字符串地址,否则调用的则是operator(const char*),输出的则是char型常指针指向的内容,如:
char *ch="hello world";
char s[12]="hello world";
cout<<ch<<endl;    //调用operator<<(const char*)输出字符串
cout<<(void*)ch<<endl; //调用operator<<(void*)输出字符串地址
cout<<s<<endl;     //调用operator<<(const char*)输出字符串
cout<<(void*)s<<endl;  //调用operator<<(void*)输出字符串地址

#include <iostream>
using namespace std;
int main()
{
    ;
    int *p=&a;
    cout<<p<<endl; //0x22fe98
    cout<<&a<<endl; //0x22fe98    

    char *ch="hello world";
    cout<<ch<<endl;            //hello world
    cout<<(void*)ch<<endl;        //输出字符串ch的地址0x47f000
    cout<<&ch<<endl;             //输出指针ch的地址0x22fe94 

    ]="hello world";
    cout<<s<<endl;             //hello world
    cout<<(void*)s<<endl;        //输出字符串s的地址0x22fe88
    cout<<&s<<endl;            //输出字符串s的地址0x22fe88(因为&s是个行指针) 

    ;
}

随机推荐

  1. ueditor 1.4.3 gbk asp 上传中文乱码 终极解决方法 ie6 ie8 也适用

    [摘要:百度编纂器1.43 gbk asp 题目 1.firefox3.0下 单图上传 面没有了 面多图上传 中央的蓝色按钮(即 面击挑选图片)没有表现(附件上传出那个题目) 没有晓得我的水狐吃翔了 ...

  2. Vue + Webpack + Vue-loader 1

    Vue + Webpack + Vue-loader 原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue ...

  3. webpack 的使用1

    进入指定文件夹  npm init 安装 npm install webapck --save-dev 根目录下新建hello.js 将文件打包到指定文件  Asset :打包成的文件名称 Chunk ...

  4. 双向链表--Java实现

    /*双向链表特点: *1.每个节点含有两个引用,previos和next,支持向前或向后的遍历(除头节点) *2.缺点插入或删除的时候涉及到引用修改的比较多 *注意:下面的双向链表其实也实现了双端链表 ...

  5. 进程PCB

    struct task_struct { volatile long state; //说明了该进程是否可以执行,还是可中断等信息 unsigned long flags; //Flage 是进程号, ...

  6. 《Attention Augmented Convolutional Networks》注意力的神经网络

    paper: <Attention Augmented Convolutional Networks> https://arxiv.org/pdf/1904.09925.pdf 这篇文章是 ...

  7. sdk manager闪退

    ,1确认好sdk环境变量是否都正确 命令行:android 来验证 2确定jdk是否安装正确 命令行:java   和  javac 都没有问题,就将sdk安装版覆盖安装下不要卸载,不然下载的太慢了 ...

  8. js去掉某一属性

    将某一属性赋值为空就行了. 例如: document.getElementById('second').style.color = '';

  9. 微信小程序request同步请求

    今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...

  10. EXCEPTION-El表达式

      CreateTime-- Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到的做个汇总),特此声明! stud ...