C语言学习---day2
1.变量的定义定义时可以赋初始值,也可以不赋初始值变量定义格式:数据类型 变量名三种写法//1.定义一个int型变量aint a;//2.定义一个int整型变量a同时给a赋值66int a=66;//3.先定义int型变量a,再初始化赋值66给aint a;a=66;//4.同时定义多个变量int a,b;a=66,b=12;2.变量的声明变量声明格式:extern 类型 变量名;//表示变量a在
目录
变量及数据类型
变量
c语言为了处理数据,必须用变量去存储数据即变量就是程序可操作的存储区的名称
变量本质上是一块内存区域,定义变量就是给一块内存空间大小取名
变量的定义和声明
1.变量的定义
定义时可以赋初始值,也可以不赋初始值
变量定义
格式:
数据类型 变量名
三种写法
//1.定义一个int型变量a
int a;
//2.定义一个int整型变量a同时给a赋值66
int a=66;
//3.先定义int型变量a,再初始化赋值66给a
int a;
a=66;
//4.同时定义多个变量
int a,b;
a=66,b=12;
2.变量的声明
变量声明
格式:
extern 类型 变量名;
extern int a;//表示变量a在其他地方进行定义
区别变量定义和声明
变量声明是不会划分内存的
变量定义是要分配内存的
变量的命名规则
只能由字母、数字、下划线组成,不能包含其他特殊字符
注:
-
变量名不能与关键字重名
-
变量名首字符不能是数字
-
变量名取名一定要通俗易懂,最好不要用拼音
3.变量的初始化
int a=10;//定义时初始化赋值
int a;
a=10;//定义后初始化赋值
变量类型
按变量定义位置分为
全局变量
定义在代码块外的变量 (代码块:函数体外,即 { } 外部)
生命周期:整个程序,从程序开始到程序结束(生命周期:变量从申请内存空间到结束释放内存)
作用域:程序中任意位置可以调用(除了变量定义前面)
局部变量
定义在代码块内部的变量或形参(函数的形参也算)
生命周期:从定义位置开始到代码块结束为止
作用域:代码块内部调用
注意
两种变量在未初始化时,系统默认值不同
局部变量:系统不会赋值,为随机值
全局变量:系统默认赋值为0
数据类型
数据类型指用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。(个人理解,数据类型就是规定了变量的类型、存储的位数)
位模式:即数据的存储规则,不同数据类型的存储规则不同,如浮点型采用IEEE
数据存储基础概念:数据在计算机中以二进制的形式存储,字节(Byte)是表示数据的基本单位,比特位(Bit)是表示数据的最小单位
其中 1个字节等于8个比特位,即 1 Byte = 8 Bit
常见数据类型:
整型:char、shortint、int、long、long long(整数)
浮点型(实型):float、double、long double(小数)
布尔型:bool(不是基础数据类型)
数据类型根据符号分为有符号和无符号
有符号(signed):区分正负数;最高位是符号位,0代表正数,1代表负数;其它位是数据位
无符号(unsigned):只有0和正数;所有二进制位都是数据位
一般不加unsigned修饰数据类型,表示默认该数据类型为有符号数据类型
注:
任何数据类型的数据在计算机中都是以二进制形式存储的
不同的数据类型能存储二进制的位数不同,可表示的数的范围不同
常见数据类型在不同位数操作系统下,占内存的字节大小
1.字符型数据
char 字符型 字符型占1字节内存大小(8比特位)
1byte = 8bit
取值范围:-128~127(-2^7~2^7-1)
有符号字符型共占8位内存,最高位为符号位不表示数据所以能表示数的范围为 -2^7~2^7-1
无符号(unsigned char):0~255
char类型表示数据类型是字符,在c语言中字符用单引号括起来表示
每一个字符都有对应的ASCII码值(详情可百度查ASCII码表),char字符型实际存储的就是对应字符的ASCII码值
常见字符对应ASCII码值
字符 ASCII码值
'A' --> 65
'a' --> 97
'0' --> 48
'\0' --> 0
空格 --> 32
注:c语言没有字符串数据类型,字符串通过字符数组和字符指针存储
2.整型数据
int 整型 占4字节内存大小(32比特位)
取值范围:-2^31~2^31-1
有符号字符型共占32位内存,最高位为符号位不表示数据所以能表示数的范围为 -2^31~2^31-1
无符号(unsigned char):0~2^32 (最高位不再表示符号,表数据)
int类型表示数据类型是整数(可以是正、负整数和0)
3.浮点型数据
float 浮点型 占4字节内存大小(32比特位)
取值范围:±1.18E-38 ~ ±3.4E+38
遵循 IEEE 754 单精度标准,它由 1 位符号位、8 位指数和 23 位尾数构成,能表示大约 6-7 位十进制有效数字。
1.18E-38 <==> 1.18 * 2^-38 计数方法表示 1.18 * 2的-38次方同理
3.4E+38 <==> 3.4 * 2^38 表示 3.4 * 2的38次方
double 双精度浮点型 占字节8字节内存大小(64比特位)
取值范围:±2.23E-308 到 ±1.79E+308
注:float(单精度)浮点型的精度比double(双精度)的低
float 默认小数点后有效位6位(精度)
double 默认小数点后有效位12位(精度)
4.布尔型数据
bool型数据 用来判断真假
不是基础数据类型不能直接用,要引入头文件
#include <bool.h>
bool t =1;
真true (非0) 假false(值为0)
实际用途:和条件判断if语句配合使用,表示条件成立
布尔类型也可作为函数的返回值
C语言规定条件值 非0即真 (即条件值位任何不为零的数都表示条件为真)
5.复合数据类型
结构体:struct
共用体(联合体):union
结构体:
//语法:
struct 结构体名
// {
//
//};
typedef struct data
{
short a;
char b;
int c;
}Data;
Data a<=>struct data a; //两种写法等价,表示定义一个Data结构体类型的变量 a
// struct data 表示自定义结构体数据类型 struct data
// typedef 重命名 sturct data 为 Data
结构体作为一种复合数据类型,内部可以定义不同基础数据类型的成员变量,多适用于需要管理操作复杂数据结构的场景
数据类型转换
1.自动转换
自动转换遵循一定的规则,由编译器自动完成
转换原则:
1.占用字节数少的(值域小)类型,向内存字节数多的(值域大的)类型转换
2.
1)当表达式中出现char、short、int类型型中一种或者多种,没有其他数据类型,参与运算的成员全部变成int类型计算,结果自动转为int类型(占字节少的向占字节多的自动转换)
2)当表达式中出现小数的实数,参加运算的全部变成double类型参加计算,结果也是double类型(精度低的向精度高的自动转换)
3)当表达式中出现符号数,也有无符号数,参加运算的成员会变成无符号参加运算,结果也是无符号的
4)在赋值语句中等号的右边类型会自动转换成等号左边的类型
2.强制转换
不满足自动转换时,把表达式的结果强制转换成所需要的类型
语法:
(类型说明符)表达式
把表达式放入运算结果强制转换成类型说明符所表示的类型
例:
(int)(x+y);//把x+y的结果强制转换成整型
注:
无论是强制类型转换还是自动转换,都是为了本次计算的需要,而对变量的数据长度进行临时的替换,而不改变定义原本的类型和数值
更多推荐
所有评论(0)