C 语言中” 与””的区别
'' 引起的一个字符代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。"" 引起的字符串代表的是一个指向无名数组起始字符的指针。 |
对这两个符号产生了兴趣,遂打开 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 语言中” 与””的区别相关推荐
- Go语言中*和的区别
Go语言中*和&的区别 总结 示例 老是分不清*和&的区别,今天特意总结了一下. 1. 总结 &是取地址符. *可以表示一个变量是指针类型,也可以表示指针类型变量所指向的存储单 ...
- c语言中.和-区别,c语言中-和.的区别
对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ...
- 从go语言中找和*区别
*和&的区别 : & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , ...
- c语言exit和return区别,在fork和vfork中使用
转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: ...
- C语言中的位运算符主要有哪些?逻辑右移与算术右移的区别?
逻辑右移与算术右移的区别? 逻辑右移就是不考虑符号位,右移一位,左边补零即可. 算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,:否则,就补0. 所以算术右移也可以进行有符号位的除法,右 ...
- c语言中指针中 - 和 。的区别?
c语言中指针中 -> 和 .的区别? 例子1:比如有如下结构 typedef strut node{ int data; strut node * next; } ListNode; Lis ...
- C语言中()和【】的区别?
C语言中()和[]的区别? 1.注意()是初始化,[]是定义多个对象. 2.int* p = new int (100) 是创建一个int型的内存,并赋值为100; int *p = new int[ ...
- c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...
目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...
- C语言中 *.c和*.h文件的区别!
C语言中 *.c和*.h文件的区别! 这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...
- 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 ...
最新文章
- android 百度导航滑动会异常,百度导航Android版问题集
- python小白逆袭大佬_飞桨深造学院百度深造7天打卡第6期:python小白反攻大神的经验,深度,学习,日,第六期,Python,小白逆袭,结营,心得...
- 你有一笔新订单 语音_上市即成爆款 哪吒V首日订单突破1200辆_搜狐汽车
- 淘宝自动发货申请资格
- 我愿意参加Qcon 2010大会,你愿意吗?
- 垂直电商独立站,到底有何优势?
- big endian与little endian
- 1008 数组元素右移k位
- python 相对导入_Python相对导入机制详解
- python如何获取权限_python 权限系统设计
- js动态修改onclick的响应函数后,IE无效的解决方案
- 【历史上的今天】2 月 1 日:网景浏览器停止支持;id Software 成立;Intel 80286 芯片问世
- 激活函数:双曲正切函数 tanh(x)
- 前端和后端哪个工资高?
- 大数据分析项目实例:Hadoop数据分析应用场景
- 西瓜播放器 vue+xgplayer播放mp4/hls视频流。
- 计算机毕业设计springboot+vue基本微信小程序的校园二手闲置物品交易小程序 uniapp
- 房地产特征价格评估的次市场效应模型: 一种概率方法撰写
- Mac上UltraEdit v18.00.0.22 分享
- 网络作战训练模拟仿真管理系统软件