> http://blog.csdn.net/sszgg2006/article/details/7982866 > 转载来自于

在C++中,如果cout一个字符数组的话,那么它会沿着这个地址,一直输出这个字符串,直到遇到’\0’,例如:

char*c=”cadn\0hello”;

cout<<c<<endl;

输出的结果是:cadn

如果我们自作聪明的想输出第一个字符的地址,例如这样输出:

cout<<&c[0]<<endl;

不幸的是,这样输出的结果依旧不是我们需要的地址。

但是,如果我们回归到C语言的话,例如用printf的话,如下:

printf(“%x\n”,&c[0]);

幸福的事情发生了,输出的结果是:

46f020

的确是字符串的首地址,但是,如果我们要输出字符串的地址,难道就这一种方法吗?难道我们就不可以用我们C++上的cout达到我们的效果吗?

原因:c是靠%s,%x,%p来区分指针表达式&a[0]的输出形式的;c++没有这个格式控制,只能按一种形式输出,对char*类型的指针值就理解为串输出,所以必须对这个指针表达式做类型转换处理。

例如:

char c=’a’;

cout<<” &c:”<<&c<<endl;

输出的仍然不是字符变量c的地址。

在C++中,字符串是以空终止符(’/0’)结尾的字符数组,通过字符串中第一个字符的指针访问字符串。也就是说,字符串的值是字符串中第一个字符的(常量)地址。如下的面3种形式表示:

char *str=”string”;

charstr2[]=”string2”;

charstr3[]={’s’,’t’,’r’,’i’,’n’,’g’,’3’,’/0’};

cout<<”line 1:str=”<<str<<endl;

cout<<”line 2:str2=”<<str2<<endl;

cout<<”line 3:str3=”<<str3<<endl;

运行可知,这3行的输出就是保存的字符串的值,而并非我们认为的地址。那么,我们可以联系到前面&c,其实这就是一个char *的变量,所以,输出的自然就应该是字符串的值。可是,&c保存的字符串是没有终止符的,因此输出的也就是乱码了。

最近,在读到《C++程序设计教程》(第4版)第12章的时候,我才解决了这个疑惑。实际上,C++标准库中I/O类对输出操作符<<重载,在遇到字符型指针时会将其当做字符串名来处理,输出指针所指的字符串。既然这样,我们就别让他知道那是字符型指针,所以得进行类型转换,即:希望任何字符型的指针变量输出为地址的话,都要作一个转换,即强制char *转换成void *,如下所示:

cout<<”static_cast<void *>(&c)=”<<static_cast<void*>(&c)<<endl;

cout<<”static_cast<void *>(str)=”<<static_cast<void*>(str)<<endl;

此时,可以看到输出的结果就是char类型变量和字符串变量的地址了。

[转] C++中字符型变量的地址输出相关推荐

  1. C++中字符型变量与整型的算术运算

    C++中字符型变量与整型的算术运算 字符型变量与整型的算术运算 C++中算术运算中的精度 下面的代码展示了上面表达式中类型的转换 数据类型的自动转换 字符型变量与整型的算术运算 最近在学习C++,经常 ...

  2. C语言中字符型变量与整型变量的联系

    1)字符型变量可以与整型变量一样进行算术运算(使用字符数据的ASCII码值进行运算的) 例1: char m = 'A'; char n = 32; //char类型直接赋值整型,此整型为对应字符的A ...

  3. c语言中字符型变量的类型标识符是,C语言中类型标识符有哪些

    满意答案 564vlaci 2015.10.29 采纳率:48%    等级:12 已帮助:6409人 C语言中的标识符 1) 标识符由字母.数字.下划线"_"组成,并且首字母不能 ...

  4. c语言 字符型变量,C语言中字符型变量与整型变量的联系

    1)字符型变量可以与整型变量一样进行算术运算(使用字符数据的ASCII码值进行运算的) 例1: char  m = 'A'; char  n = 32;     //char类型直接赋值整型,此整型为 ...

  5. 【小白学习C++ 教程】九、C++中字符型、字符串和转义字符

    @Author:Runsen 文章目录 字符串 字符 转义字符 字符串 要在 C++ 中使用字符串,我们首先需要#include <string> 标头,来引入 std::string 的 ...

  6. ‘字符型‘变量和‘字符串型‘变量

    一.字符型   作用:字符型变量用于显示单个字符  语法:char ch=' a '(要用单引号,且单引号内只能用一个字符) char ch='a': cout<<ch<<en ...

  7. c语言中字符型常量在内存中存放的是,【2017年整理】c语言中字符型常量与变量使用注意事项.doc...

    [2017年整理]c语言中字符型常量与变量使用注意事项 字符型常量与变量 (1):字符常量:一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量.例如'A' 'b ...

  8. c语言中字符指针变量输入,C语言指针基础知识实例讲解

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...

  9. JAVA的知识点4——字符型变量/常量 boolean类型变量/常量

    字符型变量/常量 字符型在内存中占2个字节,在Java中使用单引号来表示字符常量.例如'A'是一个字符,它与"A"是不同的,"A"表示含有一个字符的字符串. 例 ...

最新文章

  1. IDEA IntelliJ 如何新建一个不用任何框架的web项目
  2. 2019RPA财务行业峰会:财务数字化转型
  3. 关于series的统计
  4. 大话移动通信pdf_移动通信是怎么实现的?
  5. 音视频技术开发——还有什么不能讲的?
  6. 实战分享|数据驱动「付费转化」的3个思路
  7. java中public private_java中public、private、protected区别
  8. 前端学习(3024):vue+element今日头条管理-关于默认子路由的问题
  9. 前几天和前58技术委员会主席聊了聊技术梦想
  10. java lettuce配置多数据源_Spring Boot 2.x Redis多数据源配置(jedis,lettuce)
  11. ftp4j的android应用
  12. 【廖雪峰官方网站/Java教程】多线程(2)
  13. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  14. C语言中的万能头文件
  15. 从CI/CD持续集成部署到DevOps研发运维一体化
  16. 企业为什么会遭到DDoS攻击?被DDoS攻击该怎么办?
  17. Python自动登录校园网
  18. 分享一个360加固脱壳模拟器
  19. 微课 展示 php 源码,PHP从零基础到项目实战(微课视频版)
  20. 【Reproduced】modbus4j userguide

热门文章

  1. 中国三大互联网巨头陷入移动战争
  2. Mac下Tesseract-OCR文字识别新手使用入门
  3. Linux测试主机之间连通性和端口是否开放的方法
  4. MobaXterm 全能型开源远程终端
  5. 智能穿戴:致我们触手可及的未来?
  6. jsp通过<%@include file=“bottom.txt“ %>指令引入txt乱码的解决方法
  7. 软件工程基础第一次作业
  8. word恢复到安装时的状态?
  9. 倒看北斗星---念霍去病
  10. S7-1200PLC—实验五 引风机和送风机的顺序控制