'' 引起的一个字符代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。"" 引起的字符串代表的是一个指向无名数组起始字符的指针。

对这两个符号产生了兴趣,遂打开 VS2010 查看了单引号、双引号引起的字符在内存中的存储形式。

实验方式很简单,分别查看 "yes"/'yes'/'ye'/'y' 四种字符在内存中的存储形式,代码如下:

int _tmain(int argc, _TCHAR* argv[])
{char test1[] = "yes";int test2 = 'yes';printf("%x\n", &test2);int test3 = 'ye';printf("%x\n", &test3);int test4 = 'y';printf("%x\n", &test4);return 0;
}

实验结果如下:

根据内存中的存储形式,发现 '' 引起的字符串按照整数的存储形式,将第一个字符识别为最高位,最后一个字符识别为最低位,按此顺序存入 int 变量 4 个字节的存储空间中;

"" 引起的变量按照第一个字符存储在起始地址处,最后一个字符存储在结束地址处。

实验的结果证实了《C陷阱与缺陷》中的描述,那么当 '' 引起的字符超过 4 个字节时会出现什么情况呢?再进行一次实验,代码如下:

int _tmain(int argc, _TCHAR* argv[])
{char test1[] = "yes";int test2 = 'yes';printf("%x\n", &test2);int test3 = 'ye';printf("%x\n", &test3);int test4 = 'y';printf("%x\n", &test4);int test5 = 'yesa';printf("%x\n", &test5);return 0;
}

实验结果如下:

根据实验结果可以看到字符超过 4 个字节,超出了 int 型存储能力,编译器报错,提示常量字符太多。这样可以有效提醒给程序猿同学,有可能存在符号输入错误,但是没有超过 int 型存储能力时照单全收,没有任何提示,存在着符号误用的隐患,以后程序出现问题调试会相当麻烦。

C 语言中” 与””的区别相关推荐

  1. Go语言中*和的区别

    Go语言中*和&的区别 总结 示例 老是分不清*和&的区别,今天特意总结了一下. 1. 总结 &是取地址符. *可以表示一个变量是指针类型,也可以表示指针类型变量所指向的存储单 ...

  2. c语言中.和-区别,c语言中-和.的区别

    对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ...

  3. 从go语言中找和*区别

    *和&的区别 : & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , ...

  4. c语言exit和return区别,在fork和vfork中使用

    转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: ...

  5. C语言中的位运算符主要有哪些?逻辑右移与算术右移的区别?

    逻辑右移与算术右移的区别? 逻辑右移就是不考虑符号位,右移一位,左边补零即可. 算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,:否则,就补0. 所以算术右移也可以进行有符号位的除法,右 ...

  6. c语言中指针中 - 和 。的区别?

    c语言中指针中 -> 和 .的区别? 例子1:比如有如下结构 typedef strut node{ int data;   strut node * next; } ListNode; Lis ...

  7. C语言中()和【】的区别?

    C语言中()和[]的区别? 1.注意()是初始化,[]是定义多个对象. 2.int* p = new int (100) 是创建一个int型的内存,并赋值为100; int *p = new int[ ...

  8. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  9. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!      这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...

  10. GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)

    u-boot/cpu/xx/start.S中: _TEXT_BASE:  .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我设置为0xa170 0000 */ .glob ...

最新文章

  1. android 百度导航滑动会异常,百度导航Android版问题集
  2. python小白逆袭大佬_飞桨深造学院百度深造7天打卡第6期:python小白反攻大神的经验,深度,学习,日,第六期,Python,小白逆袭,结营,心得...
  3. 你有一笔新订单 语音_上市即成爆款 哪吒V首日订单突破1200辆_搜狐汽车
  4. 淘宝自动发货申请资格
  5. 我愿意参加Qcon 2010大会,你愿意吗?
  6. 垂直电商独立站,到底有何优势?
  7. big endian与little endian
  8. 1008 数组元素右移k位
  9. python 相对导入_Python相对导入机制详解
  10. python如何获取权限_python 权限系统设计
  11. js动态修改onclick的响应函数后,IE无效的解决方案
  12. 【历史上的今天】2 月 1 日:网景浏览器停止支持;id Software 成立;Intel 80286 芯片问世
  13. 激活函数:双曲正切函数 tanh(x)
  14. 前端和后端哪个工资高?
  15. 大数据分析项目实例:Hadoop数据分析应用场景
  16. 西瓜播放器 vue+xgplayer播放mp4/hls视频流。
  17. 计算机毕业设计springboot+vue基本微信小程序的校园二手闲置物品交易小程序 uniapp
  18. 房地产特征价格评估的次市场效应模型: 一种概率方法撰写
  19. Mac上UltraEdit v18.00.0.22 分享
  20. 网络作战训练模拟仿真管理系统软件

热门文章

  1. 如何识别能把桥压塌的大车?快看!能救命!
  2. 讲讲Git如何合并分支(一)
  3. ab串(要求a在b的右面)
  4. scrapy爬虫框架初相识
  5. 在机器人的眼里到底能看到什么,它们和人类的视觉系统有什么区别?
  6. 第三篇:时间和全局状态(三)
  7. 转: object 和embed 标签播放flash
  8. xml serialize
  9. ASP.NET控件Repeater遍历
  10. 哥们,你侵权了,哥有权告你去!