目录

变量及数据类型

变量

变量的定义和声明

变量类型

数据类型

1.字符型数据

2.整型数据

3.浮点型数据

4.布尔型数据

5.复合数据类型

数据类型转换

1.自动转换

2.强制转换


变量及数据类型

变量

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的结果强制转换成整型

注:

无论是强制类型转换还是自动转换,都是为了本次计算的需要,而对变量的数据长度进行临时的替换,而不改变定义原本的类型和数值

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐