对于 C 语言的学习,必须的有一个标准:以能否编译通过,运行出结果为准,相信我,目前市场上面主流的编译器都是没有问题,编译不通过,第一想法,是程序的问题,而不是编译器的问题,先把这个思想灌输给大家。
常量
常量:写 C 程序的时候,在源程序文件中表达不变的量的各种 “合法” 的书写方式
常量主要有以下几种:
- 整型(int、short、long)
进制 | 解释 |
---|---|
十进制 | 是以数字 0-9 组成的整数,eg:123、5、0、-23 等 |
八进制 | 是以数字 0-7 组成,并且是以 0 开头的整数,eg:014、-012等 |
十六进制 | 是以 0-9 和 a-f/A-F 组成,以 0x 或者 0X 开头额整数,eg:0x41、0XAC等 |
- 浮点型(float、double)
- 在 32 位系统下,默认浮点类型为:float
- 在 64 位系统下,默认浮点类型为:double
- 科学计数法:aeb,其中 a 必须是整型或者小数,b 必须是整型,e 可以用 E,eg:3e-2 的意思是:3 * 10^-2 = 0.03
- 字符常量
- 字符表示:‘A’、‘0’、‘a’
- ASCII码表示:65、32、97 (下面普及 ASCII 码)
- 八进制、十六进制均可以表示字符常量,分别为:’\ ‘、’\x ’
- 转义字符:就是针对有歧义的字符,避免出现二义性,C 语言引入了一个机制:在 " \ " 的后面,写一个字符,就可以表达特定的字符本身含义。
eg: ‘\’,这样才能表示出一个 \ 的意思
- 字符串常量
- 在编译器中“”双引号中的都是字符串常量
eg:“ABC”、"\x41\x42\x43" (十六进制的字符串常量,其实只有 3 个字符)- 字符串长度:不包括 “” ,只数字符个数
eg: “”:长度为 0 的字符串叫做空串
eg: " ":长度为 1 的空格串- 字符数量:在字符串中,寄存器内部会在储存字符串时,自动加上 “\0”(即空字符)作为判断字符串结束的标志。所以在计算字符串的字符数量时,字符长度=实际字符数+1
eg: “ABC” 的字符长度为4
ASCII码
在计算机中,像汉字、字符是不可能存储的,计算机只认识 0 和1,对于字符,计算机是通过点阵矩阵进行存储(一个英文字符将对应一个点阵信息),保存一个英文字符的点阵信息,需要 2 字节的存储空间
在计算机中,对字符的管理,是通过编号进行的,编号的三个原则:
- 从 0 开始编号
- 连续编号
- 用二进制编号
对英文字符的点阵信息使用一个字节的低 7 位进行编号,这个编号就叫做:ASCII 码 (常见的ASCII编码如下)
符号 | ASCII码 |
---|---|
’ ’ | 32 |
‘0’ | 48 |
‘A’ | 65 |
‘a’ | 97 |
ASCII比较
在这里,我们需要主要的是,ASCII 码就是字符所对应的编号,看到 ASCII 码就等价于这个编号(数字),字符即数字。
对于字符的大小比较,或者是字符串的大小比较,其实都是对其 ASCII 码进行比较,换为相应的编号,做减法即可。
关于全角和半角:全角实质上就是中文点阵,占 2 字节,半角就是英文点阵,也就是 ASCII 码,占 1 字节,在 C 语言程序设计中,只能使用英文的标点,不得使用中文标点。
变量
本质:内存中一段连续的存储空间,空间即变量
计算机表达信息的最小物理单位:一个二进制位(比特 bit)
转化前 | 转化后 |
---|---|
1B | 8bit |
1KB | 1024B = 2^10B |
1MB | 1024KB = 2^20B |
1GB | 1024MB = 2^30B |
关于内存
- 内存是由多个字节组成的一维、线性、连续存储空间
- 字节是内存分配存储空间的基本单位
- 对于内存中的多个字节,通过对字节(也就是内存空间 1B)进行唯一性的编号来管理
- 参与字节编号的二进制位数,将决定这个计算机所能管理的内存大小
变量的三个要素
- 变量名称:每个变量都必须起一个英文名,变量名称要能很清晰的代表其所表达的意思,eg:年龄,用变量名:age
另外,变量的命名原则在代码规范中尤其重要,请务必牢记:
- 必须以字母或者下划线(_)开头
- 只能由字母、数字、下划线字符组成
- 不能使用 “关键字” 起名(也叫保留字)
- C 语言区分大小写
- 变量类型:决定了该变量在内存中的大小(字节数)
- 变量的值:对该变量空间中进行一系列运算后,所得到的结果
补充
定义变量的本质:申请存储空间,变量的类型在定义时被确定,其终生不会改变,在标准 C 下面,变量必须先定义,后使用,定义变量的语句必须在所有的有效语句之前,且定义变量不赋值,默认为垃圾值。
注意:
常量和变量所占的内存空间是不一样的,
一般常量在常量区,变量分配的空间在栈上。
ps: 觉得不错的,欢迎随手点赞、转发