



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言深入理解 - 常量与变量+C语言深入理解系列- 常量与变量查看其它博文请关注原创作者。本文系本站原创,欢迎转载! 转载请注明出处:/mr_raptor/article/details/7212155+常量与变量正所谓静中有动,动中有静,常量与变量亦是如此,它们之前相互依赖,相互影响。关于常量与变量,很多朋友可能觉得没有什么好介绍的,它实在是太简单了,单从字面上看就知道什么意思?我想说的不是关于常量与变量的概念,而是其深入的实质。其实很多朋友在学到后面指针的时候经常会出现,段错误,晕指针(我对那些指针恐惧者的症状叫法),野指针等问题,都是因为对常量和变量的理解不够深入,基础理解不够踏实。常量:其值不会发生改变的量,称为常量。它们可以和数据类型接合起来分类。比如:整形常量,浮点型常量,字符常量等等,常量是可以不经过定义和初始化,而直接引用的。常量分类:常量又分为:直接常量和符号常量。直接常量又叫做:字面常量。如12,0,4.6,a,”abcd”符号常量:如宏定义的:#define PI 3.14特点:常量的值在其作用域内不会发生改变,也不能再被赋值。其在出现时就被当作一个立即数来使用。也就是说,只能被访问,被读,而不能被写,被赋值。其实,你一旦声明了一个常量,那么常量所在的内存空间就被加上了只读的属性,它有点类似于const关键字。变量:其值在其作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储空间。变量在使用前必须要定义。每个变量都有自己的地址。变量分类:变量依据其定义的类型,分为不同类型,如:整型变量,字符型变量,浮点型变量,指针型变量等等。特点:变量其值可以发生改变,意味着它可以被覆盖,被写入,被赋值。每个变量必须要有一个名字和它所在内存空间绑定,如图xxx所示。图xxx 变量内存空间示意图代码中声明整型变量a,它的类型已经决定,那么它的大小也就是4个字节(32位机上),那么在内存中就有连续的四个字节与之对应,a变量名就代表了这四个字节的空间,a变量的地址就是连续四个字节的开始的地址0x000。就好像是饭店里每个房间都有一个地址,如201室代表二楼每一个房间,叫201不太雅观,我们起个名字叫:牡丹厅。那么,我们人为的将“牡丹厅”这个名字和201房间绑定在了一起。当我们说到牡丹厅,就知道是201房间,同样当我们说201房间我们也知道是牡丹厅。同样的道理,当我们说a变量,就知道是从0x000这个地址开始的4个字节,当我们说0x000地址就知道这是a变量的空间。那么既然a是变量也就是说它所代表的空间里的数据是可以修改的,同样0x000地址处的数据也是可以修改的。变量名和变量的值:变量名是在变量的声明的时候,该名字就和内存中一块地址绑定在一起了。可以通过变量名直接找到对应的内存区域,也可以通过地址找到其内存区域。变量的值是变量所对应的内存区域内存放的二进制序列。变量的值不会因为变量的类型发生了改变而改变,当变量被转换为对应类型时,内存区域的二进制序列以该类型的形式翻译出来。这也是强制类型转换能够成立的原因。例如:第一行代码:整型变量a在内存中是以97的二进制形式存放的,当使用它时,会被以十进制形式表现出来。第二行代码:字符变量ch1的ASCII 码是97,也是以97的二进制存放的,使用时,会被以字符a的形式表现出来。第三行代码:将整型变量a强制类型转换成字符型,a变量里的值没有变,变的是它的类型,它里面的值还是97的二进制,它类型变成了char,97的二进制变成char型,表现出来就是字符a。第四行代码:声明一个字符型指针变量p,p是个变量,它里面的值可变,它的值是整型变量a的值强制类型转换成了字符指针类型。这个时候p里的值还是97的二进制,只不过这个97的意义已经代表了一个字符型指针,也就是一个指向字符的地址了。由此可见:变量在内存中存放和它的值没有关系,而是和它的类型相关的。同样我们也可以得出:一个二进制序列对于计算机本身而言没有任何意义,计算机根本不知道这个二进制数据是干什么的,只有具体到它的类型时或出现在合适的场合时,才能代表具体的意义。如果一串二进制数据出现在地址总线上,它代表是一个地址,如果该相同数据出现在数据总线上,它代表是一个数据。所以,当我们看到一个数据时,比如:3.1415926,不能把它戴上定向思维的帽子认为它就是PI,而是要看清它的本质,它就是一堆二进制代码。我们来看下下面的例子:1.char ch = a;int a = (int)ch;printf(“%d %cn”, a, ch);ch是什么?ch里装的是什么?a是什么?a里面装的是什么?打印什么?2.int add = 0x12345678;int *p = (int*)add;add是什么?add里装的是什么?p是什么?p里装的是什么?*p又是什么?&p又是什么?3.#define PI 3.14int a = PI;printf(“%dn”, a);上面的代码有没有问题?4.#define PI 3.14printf(“%dn”, PI);代码有没有问题?5.#define PI 3.14int a = PI;PI = 3.1415926;int b = PI;printf(“%d %dn”, a, b);代码有没有问题?6.char *str = “hello world”;printf(“%sn”, str);*str = “goodbye world”;printf(“%sn”, str);代码有没有问题?答案:1. 测试对变量类型的理解和类型转换。ch是字符型变量,ch里是字符a的二进制数,a是整型变量,a里面是字符a的二进制数的整型表示方式,以十进制数表示出来97。打印结果为97 和 a。2. 测试对整型和地址类型转换。add是一个整数变量,add里是0x12345678的二进制数,以十进制表现出来,p是一个整型指针变量名,p里面是0x12345678的二进制数,以地址的方式表现出来,代表地址0x12345678。*p是通过*去访问地址0x12345678这个地址处的数据(如果你试图去打印它,会出错,因为这个地址你不一定有权限去访问)。&p是取出整型指针变量p的地址,因为p是一个变量,它也有自己的地址,所以可以取出它的地址来(见上面变量的定义)。3. 宏定义一个常量PI,PI这个符号代表了3.14,在代码执行前的预处理阶段第二行int a = PI,已经被替换为了int a = 3.14,将3.14赋值给整型,会舍弃掉小数点后面部分结果,仅保留整数部分,打印结果为3。4. 和上面3一样,在预处理阶段被替换成了printf(“%dn”, 3.14),结果为1374389535,这是因为将浮点型的3.14在内存中的数据,以整型来表现的。5. 第三行PI = 3.1415926会出错,PI是个常量其被替换成了3.14 = 3.1415926,3.14是个字面常量,不能被赋值。错误信息为“向无效左值赋值出错”(关于常见错误信息,见C语言常见错误详解章节)。6. 第三行*str = “goodbye world”出错,第一行中将字符串常量“hello world”的首地址给了字符指针变量str,第三行试图将“goodbye world”的首地址,通过*str的访问方式覆盖str指向的字符串常量“hello world”。这句话理解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理沟通与礼仪
- 贵州省毕节市金沙县2025-2026学年高三上学期开学检测语文试题及参考答案
- 放管服培训课件
- 四川省江油市六校2026届化学九年级第一学期期中质量跟踪监视试题含解析
- 江西省上饶市广丰区2026届化学九年级第一学期期中经典试题含解析
- 湖北省武汉市武昌区八校2026届化学九上期中考试试题含解析
- 2026届浙江省金华市国际实验学校九上化学期中复习检测试题含解析
- 2026届贵州省安顺市名校化学九上期中调研模拟试题含解析
- 2026届湖北省咸宁市名校九年级化学第一学期期中考试模拟试题含解析
- 2026届吉林省长春二道区七校联考化学九上期末质量跟踪监视模拟试题含解析
- 下肢深静脉血栓的护理查房PPT
- 中国产业结构与布局的历史演变
- GB/T 41697-2022康复辅助器具一般要求和试验方法
- GB/T 156-2007标准电压
- AM咨询I治理方法论
- 工程财务决算审计服务方案
- 自考英语考试真题及答案新版
- Q∕GDW 11612.1-2018 低压电力线高速载波通信互联互通技术规范 第1部分:总则
- 哈工大单片机张毅刚课件 第3章
- 净化实验室施工组织方案
- 110KV变电站负荷及短路电流计算及电气设备的选择及校验
评论
0/150
提交评论