C语言数据类型与变量
数据类型
C语言提供了丰富的数据类型来描述各种数据。
使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述用数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才
知道怎么操作数据
下文中的[]表示可省略
字符型
1 | char //character |
整型
1 | //短整型 |
1 | //整型 |
1 | // 长整型 |
浮点型
1 | float //单精度浮点数 |
布尔类型
在C99中引入了布尔类型,表示真假
1 | bool |
布尔类型的使⽤得包含头⽂件
1 | <stdbool.h> |
布尔类型的取值为 true 或 false
1 |
1 |
|
各种数据类型的的长度
每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变
量,变量长度的不同,存储的数据范围就有所差异。
sizeof 操作符
sizeof是一个关键字,,也是操作符,专门是用来计算sizeof的操作符数的类型长
度的,单位是字节(byte)。
操作数可以是类型,也可是变量或者表达式。
1 | sizeof(类型) |
1 | int a = 0; |
1 |
|
C语言中规定
1 | sizeof(long) >= sizeof(int) |
1.5.2 sizeof 中表达式不计算
sizeof在代码进行编译的时候,就根据表达式的类型确定了,类型的常用,而表
达式的执行却要在程序运行期间才能执行,在编译期间已经将sizeof处理
掉了,所以在运行期间就不会执行表达式了。
1 | int a = 1; |

sizeof 的截断
1 | int a = 1; |
此处决定 sizeof 返回值的是 b ,发生了截断。
sizeof 运算符的返回值,C语⾔只规定是无符号整数,并没有规定具体的类型,
而是留给系统自己去决定。
C语言提供了一个解决方法,创造了⼀个类型别名 size_t 用来统一表示 sizeof
的 返回值类型。
在 visual studio 中,用 %zd 来打印 sizeof 的返回值。
二、 signed和unsigned
C语言中 signed 和 unsigned 关键字是修饰字符型和整数类型的。
signed关键字,表示一个类型带有正负号
unsigned关键字,表示一个类型不带有正负号,只能表示0和正整数。
对于 int类型,默认是带有正负号的,也就是说 int 等于 signed int。
整数变量声明为 unsigned的好处是,同样长度的内存能够表示的最大整数值,
增大了⼀倍。
比如,16位的 signed short int 的取值范围是:-32768~32767,最大是32767
而 unsigned short int的取值范围是:0~65535,最大值增大到了65,535。
上述图片是 visual studio 中的部分相关定义。
值得注意的是,C语言规定 char 类型默认是否带有正负号,由当前系统决定。
这就是说, char 不等同于 signed char , 有可能是 signed char ,也有可能是
unsigned char 。
在 visual studio 中 , 直接写 char 就是 signed char。
占位符
C 语言中的占位符(格式说明符)主要配合 printf、scanf 等输入输出
函数使用,以 % 开头,作用是告诉函数要处理的数据是什么类型。
常见数据类型
| 占位符 | 作用 | 对应数据类型 |
|---|---|---|
| %d | 输出 / 输入 十进制整数 | int |
| %c | 输出 / 输入 单个字符 | char |
| %s | 输出 / 输入 字符串 | 字符数组 char[] |
| %f | 输出 / 输入 十进制小数 | float / double |
| %p | 输出 变量的内存地址 | 指针类型 |
变量和常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示
定义变量的方法
1 | data_type name; |
在创建变量时赋予一个初始值是一个好习惯。
变量在创建的时候就给⼀个初始值,就叫初始化。
变量的命名
- 只能由字母(包括大写和小写)、数字和下划线(_)组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字。
变量的分类
全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。
局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。
1 | int global = 2026;//全局变量 |
当局部变量和全局变量同名的时候,局部变量优先使用。
变量的使用
1 | int main() |
1 | int a; |
一个局部变量没有初始化的时候默认值是随机值
一个全局变量没有初始化的时候默认值是0

当局部变量和全局变量同名的时候,局部变量优先使用。
算术操作符
C语言中为了方便运算,提供了一系列操作符,其中有⼀组操作符叫:算术
操作符。这些操作符都是双目操作符。
+ 和 -
用来完成加法和减法。
1 | int x = 1; |

*
用来进行乘法运算
1 | int main() |

/
用来进行除法运算。
两端如果是整数,执行的是整数除法,得到的结果也是整数。
1 | int num1 = 10; |

如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时C语
言就会进行浮点数除法。
1 | int num1 = 10; |

%
求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能
用于浮点数。
1 | printf("%d\n", 10 % 3); |

负数求模的运算结果正负由第一个操作数决定
1 | printf("%d\n", -11 % 3); |
前置 ++ 就是先加一 ,后使用

在这段代码里反应为 a 先自加等 1,再赋值给 b 。
后置 ++
1 | int a = 10; |
后置 ++ 就是先使用 ,后 + 1
在这段代码里反应为 a 赋值给 b,再进行自加等 1 。
前置–
与前置++逻辑一样,只是变成了-1
1 | int a = 10; |

后置–
与后置++逻辑一样,只是变成了-1
1 | int a = 10; |

强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,
形式如下:
1 | (类型) |
1 | int a = (int)3.14; |




