从嵌入式眼光看待C语言之数据类型01
来源:互联网 发布:蓝牙车载充电器 知乎 编辑:程序博客网 时间:2024/05/18 18:17
=========变量和常量============ 正所谓"静中有动,动中有静",常量和变量也是如此,它们之间相互依赖,相互影响,单从字面看就知道是什么意思.这里不是常量与变量的概念,而是深入的实质. 其中很多人在学到后面指针的时候经常会出现段错误,晕指针(指针恐惧者的叫法),野指针等问题,都是因为对常量和变量的理解不够深入,基础理解也不踏实. 变量 什么是变量 其值在其作用域内可以改变的量称之为变量,一个变量应该有一个名字,在内存中占据一定的存储空间,变量在使用前都有自己的地址.变量都有自己的地址. 变量依据其定义的类型,分为整型变量,字符型变量,浮点型变量,指针型变量等.变量的值可以发生改变,意味着他可以被覆盖,被写入,被覆值. 每个变量必须要有一个名字和它所在内存空间绑定.
int a=97; char ch1='a'; char ch2=(char)a; char *p=(char*)a;第一行代码:整型变量a在内存中是以97的二进制形式存放的,当使用它时,会以十进制形式表现出来.
第二行代码:字符变量ch1的ASCII码也是以97的二进制存放的,使用时,会以字符'a'的形式表现出来.
第三行代码:将整型变量a强制转换为字符 ,a变量里的值没有变,变的是它的类型,它里面的值还是97的二进制,它的类型变成了char,97的二进制变成char型,现出来就是字符a.
第四行代码:声明一个字符型指针变量p,p是一个变量,它里面的值可变,它的值是整型变量a的值强制类型转换成了字符指针类型,这个时候p里面的值还是97的二进制,只不过这个97的意义已经代表了一个字符型指针,也就是一个指向地址的指针了.
由此可见:变量在内存中存放和它的值没有关系,而是和他的类型相关的.同样我们也可以得出:
一个二进制序列对于计算机本身没有什么任何意义,计算机不知道这个二进制数据是干什么的,只有具体到它的类型时或出现在合适的场合时,才能代表具体的意义.
如一串二进制数据出现在地址总线上,它代表的是一个地址.
如果该相同数据出现在数据总线上,它代表的是一个数据,所以当能我们看到一个数据时,如3.1415926,不能把它带上定向思维的帽子认为它就是PI,而是要看清它的本质.它就是一堆二进制代码.
下面分析几个常见的几个例子
char ch='a'; int a=(int)ch; printf("%d %c\n",a,ch);ch是什么,ch里装的什么,a是什么,a里面装的是什么?打印结果是什么?
ch是字符型变量,ch里是字符'a'的二进制二进制数,a是整型变量,a里面是字符'a'的二进制整型表示方式,以十进制数表示出来是97,打印结果为97和a.
int add=0x12345678; int *p=(int *)add;
add是什么?add里装的是什么?p是什么?p里装的是什么 *p又是什么?&p又是什么?
测试对整型和地址类型转换.add是一个整型变量,add里是0x12345678的二进制数,以十进制表示出来,p是一个整型指针变量名,p里面是0x12345678的二进制数,以地址的方式表现出来,代表地址0x12345678.*p是通过*访问地址0x12345678这个地址处的数据(如果你去打印他,可能会出错,因为这个地址我们不一定有权限访问).&p是取出整数型指针变量p的地址,因为p是一个变量,他也有自己的地址,所以可以取出它的地址来 .
#define PI 3.14 int a=PI; PI=3.1415926 int b=PI; printf("%d %d\n",a,b);上面代码有无问题?
PI=3.1415926会出错,PI是个常量被其替换成"3.14=3.1415926",3.14是个字面常量,不能被赋值.错误信息为(向无效左值赋值出错)
char *str="hello world"; *str="GG!";*str="GG"出错,因为第一行将字符串常量"hello world"的首地址给了字符指针str,第二行试图将"GG"的首地址,通过*str的访问方式覆盖str指向的字符串常量"hello world"这句话理解起来比较费劲,详细说因为有两个错误
①试图向常量里写数据."hello world"是字符串常量,那么这个字符串空间里的内容不能改变.
②指针变量里应该放地址,字符串都是以首地址为地址.向一个地址里写入字符串 使用strcpy.*str只是代表了str指向的字符串的第一个字符,将字符串地址写入到字符里肯定不行.
0 0
- 从嵌入式眼光看待C语言之数据类型01
- 从汇编的眼光看C++(之指针拷贝)
- 从汇编的眼光看C++(之指针拷贝)
- 从汇编的眼光看C++(之指针拷贝)
- 从一个简单的例子深入看待c语言指针
- 如何看待C语言
- C语言之数据类型
- C语言之数据类型
- C语言之数据类型
- C语言之数据类型
- C语言之数据类型
- 深入看待c语言指针
- 嵌入式基础之----C语言
- 从汇编的眼光看C++(之delete内存泄露) .(之指针拷贝) .
- 面试总结-语言篇(从内存底层看待c/c++)
- 重试C语言之C语言数据类型
- C语言基础之《数据类型》
- C语言基础之《数据类型》
- Eratosthenes素数筛选
- 艺术玻璃加盟_河南唯美冰晶画
- dp专题 第十题 数字组合
- 基本数据类型
- java-继承 多态 抽象
- 从嵌入式眼光看待C语言之数据类型01
- 论文阅读
- java中equals,hashcode和==的区别
- Eclipse"无痛"重构链接
- Java设计模式——行为型模式
- 悼念512汶川大地震遇难同胞
- 【DOM】1.概述
- Json 和 Jsonlib 的使用
- WebSocket 的使用,和客户端断电,服务器检测断开连接