目录
C语言的数据类型
C语言数据类型介绍
数据类型就是数据的类型,不同的类型的数据占用不同数量的资源,合理分配数据的类型可以提高程序的计算效率,缩减程序占用的空间;高效的程序总是能够用很少的资源与时间就能够完成大量的计算
而C语言的数据类型就分为两大类,这两大类是由数据的读取方式来分类的,分为整形大类与浮点大类
我们在数据类型分类里介绍数据类型的占用空间大小
C语言的类型修饰符
- 类型修饰符就是对一个数据类型的限定,我列出如下类型修饰符以介绍
- const
- const 限定符用于让变量初始化之后就不能够再被改变
- static
- static
修饰符用于让变量存在于静态区,变量初始化只被执行一次,就算离开当前代码块或函数,下次进入这个区域这个变量依旧存在,且值依旧为最后一次变化时的模样
- static
- register
- register 修饰符表示这个变量将存放在寄存器内,即该变量需要经常高效的访问;但是一般不会主动使用,因为部分编译器会忽略你的决定而自行决定
- aoto
- aoto 修饰符表示这个变量在任何区域都将被视作局部变量
- signed
- signed 修饰符表示这个变量的读取方式为正数或负数,并不作为只能存正数的变量
- unsigned
- signed 修饰符标表示这个变量的读取方式恒为正数,只能够存储正值,如负值存储进这个变量,则会以正数的方式读取该变量
- const
C语言数据类型分类
整形大类
- char —— 字符型 —— 1字节
- short —— 短整形 —— 2字节
- int —— 整形 —— 4字节
- long —— 长整形 —— 4字节
- long long 长长整形 —— 8字节
int之后陈列的类型的所占空间长度规定为大于或等于上一个类型的长度,具体长度依赖编译器实现,vs下 long 为4字节,long long 为8字节
浮点型大类
- float —— 单精度浮点型 —— 4字节
- double —— 双精度浮点型 —— 8字节
- long double —— 长浮点型 —— 8字节
变量
变量的介绍
如果你需要存放计算的结果,就需要定义一个变量来存放这个结果
这个量可变,但是它并不会自己改变
变量的定义
定义一个变量的格式:
signed int a = 0;
一个变量的定义包括:
- 变量类型修饰符 —— 可省略
- 变量类型 —— 不可省略
- 变量名 —— 不可省略,不能为关键字,需符合自定义标识符书写规范
- 初始化列表 —— 可省略,将 初始化操作符 '=' 右边的值初始化入左边的量,常量在定义后不管有没有被初始化都不可被再次更改
变量的使用
一个变量的值可以赋给其它变量,也能够用于初始化其它的变量;
变量可以用于运算,也能够进行自增自减以及复合赋值操作
int a = 0;
int b = a;
int c = a + b;
a += b;
b++;
a = a + b + c;
这些都是合法的运算与赋值
运算符
运算符的介绍
运算符就是能够对数据进行一系列运算的符号,我将它们分为可以对运算数的原值进行改变的赋值类操作符与不能对操作数的原值进行改变的其它类操作符,一下进行简单描述与实例
-
赋值类
-
其它类
-
运算操作符
- 运算操作符的操作数都可以为拥有返回值或者本身就为值的表达式或者常量、变量和拥有返回值的函数,也可以用括号表达式与逗号表达式等来选取其返回值
- 单目运算操作符
- 单目运算操作符就是操作数只有一个的操作符
- 括号 (exp) 括号操作符的操作数为括号内部表达式的返回值
- + 正号,无大用
- - 取负值,返回值为操作数的负值,操作数为右值
- ~ 按位取反 返回值为操作数按位取反后的值,操作数为右值
- 双目运算操作符
- 双目运算操作符就是操作数有两个的操作符,操作数一般都为操作符两侧的值
-
运算符 运算符名 操作数示例 返回值 + 加 value1 + value2 两操作数相加的和 - 减 value1 - value2 value1 减去 value2 的差 * 乘 value1 X value2 两操作数相乘的积 / 除 value1 / value2 value1 除以 value2 的商 % 取模 value1 % value2 value1 除以 value2 的余 & 按位与 a & b a 与 b 的二进制位与 | 按位或 a | b a 与 b 的二进制位或 ^ 按位异或 a ^ b a 与 b 的二进制位异或 << 左移 a << b a 左移 b 个二进制位 >> 右移 a >> b a 右移 b 个二进制位
- 三目操作符
- 操作数有三个,但三目操作符只有一个,value1 ? value2 : value3 这就是一个三目操作符的书写规范,value1为可以表达真值的表达式或者值,如果value1为真值,那么整个表达式的返回值就为value2,否则就为value3,借助三目操作符我们可以实现一个非常简单的获取值的分支,当然了,它也支持嵌套
- 具体详解 C语言中文网
-
关系运算符
-
运算符 运算符名 操作数示例 返回值 > 大于 value1 > value2 如果成立则返回真值,否则返回假值 < 小于 value1 < value2 如果成立则返回真值,否则返回假值 >= 大于等于 value1 >= value2 如果成立则返回真值,否则返回假值 <= 小于等于 value1 <= value2 如果成立则返回真值,否则返回假值 == 相等 value1 == value2 如果成立则返回真值,否则返回假值 != 不相等 value1 != value2 如果成立则返回真值,否则返回假值
-
-
逻辑运算符
-
运算符 运算符名 操作数示例
返回值 && 逻辑与 value1 && value2 如两值都为真值
返回真值,否则返回假值
|| 逻辑或 value1 || value2 如两值中有真值
返回真值,否则返回假值
! 逻辑取反 !value 对操作数的逻辑值取反 -
逻辑与、逻辑或都拥有短路现象
-
-
逗号表达式
- exp1, exp2, exp3, exp4
- 逗号表达式的返回值为最后一个表达式的返回值
- 逗号表达式会从左到右执行表达式内的每一个表达式
-
其它操作符
- 指针结构体相关操作符
- 解引用操作符
- 结构体指针访问操作符
- 强制类型转换操作符
- (type) 将右值的类型强制转换为 type 类型
- (int)2.5 将2.5强制类型转换过后的值作为返回值传递给左值
- 数组下标操作符
- 数组下标操作符,可以将访问下标 arr[20] 分解为 *(arr + 20)
- 指针结构体相关操作符
-
操作符优先级与结合性
- 操作符的优先级及结合性参照: C语言中文网
-
我将一个操作符所代表的表达式看作两个部分
- 其进行的运算,包括赋值 —— 运算就是代表它做了什么
- 其返回值 —— 其返回值就代表着这个表达式最终的结果,如有赋值或其它获取值的需求,返回值会传递给左值/获取值的
举例说明:
int a = 1 + 2;
整形a 为返回值存放的容器
1 + 2 这个表达式做了一件事情,那就是将1 与 2相加,然后赋值操作符获取了它们相加的结果,将结果赋给了左值a,但左值a才刚定义,于是这个赋值操作符在这里应该叫做初始化操作符,但它们所作的事情是一样的,只是在不同的地方权限不同罢了
下一个例子:
int a = 10;
int b = a++;
int c = ++a;
a被初始化为10,b为存放 a++ 这个表达式的返回值的容器,而a++这个表达式的返回值为这个表达式运算前操作数的值,那么就是10,a++ 这个表达式还有其进行的运算,它进行的运算为将a + 1的值存放入a中,我们称这个过程为自增;c为存放 ++a 这个表达式的返回值的容器,而++a这个表达式的返回值为它运算过后操作数的值,由于之前我们已经对a进行了一次自增,所以++a的返回值就为11 + 1 = 12,++a进行的运算为让a自增1,所以最后三个变量的值分别为:a = 12; b = 10; c = 12;
引用
引用数据与介绍均来自C语言中文网
碎碎念
第三篇博客,我写的好慢,下一个是C语言三大流程结构:顺序分支和循环