C基础笔记3——数据类型与变量(1)

C基础笔记3——数据类型与变量

在上一篇博客中,我们介绍了c语言的令牌,本文我们将会介绍c语言的数据类型以及变量。

C中的数据类型

在 C 语言中,数据类型指的是用于声明不同类型变量函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。通俗点来说,就是规定了丰富的数据类型来描述生活中的各种数据

C 中的数据类型可分为以下几种:

序号类型与描述
1基本数据类型 它们是算术类型,包括整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)。
2枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3void 类型: 类型说明符 void 表示没有值的数据类型,通常用于函数返回值。
4派生类型: 包括数组类型、指针类型和结构体类型。

由于学识所限,本文只解释基本数据类型

image-20240801213144891

注意:

  1. 在c中没有字符串类型,如果需要表示字符串,则需要用字符数组char[]表示字符串;

  2. 在不同的系统上,部分数据类型字节长度不一样,例如int可以占两个字节或者四个字节。

1. signed 和 unsigned

C语言使用signedunsigned这两个关键字修饰**字符型(char)整型(int)**的

  • signed表示一个类型带有正负号,包含负值
  • unsigned表示该类型不带有正负号,只能表示零和正整数

因此,用通俗点的语言来说

  • signed表示有符号的数字,例如海拔、温度等
  • unsigned则表示无符号的数字,例如身高、体重等

以下是一些注意事项:

  1. 对于int类型,默认是带有正负号的,也就是说int等同于signed int,但由于这个是默认情况,关键字signed一般都不写,写了也不算错.

    如果需要int类型不带正负号,只表示非负整数,则需要在前面加上关键字unsigned声明变量,如unsigned int a;

  2. unsigned int 里面的 int可以省略,所以上面的变量声明也可以写成这样unsigned a;

  3. C语言规定 char类型默认是否带有正负号,由当前系统决定。这就是说,char不等同于 signed char,它有可能是signed char,也有可能是 unsigned char。这一点与int不同,int就是等同于 signed int

2.数据类型相关

c中的每一种数据都对其数据类型有了明确的定义,在内存中分配了不同大小的内存空间(使用字节多少表示)。

2.1 sizeof 函数

sizeof是计算变量在内存的占空间的大小,单位是字节(bit)

在使用sizeof函数时,需要添加头文件string.h

(1)使用sizeof查看数据类型占空间的大小

image-20240802120611284

执行结果如上图所示

(2)使用sizeof计算基本数据类型变量的占用空间的大小

image-20240802120830831

执行结果如上所示

注:代码行中划绿波浪线是因为vs编译器中建议使用%zd进行打印,之后会提及这些类型

2.2 整型

c语言的整数类型就是用于存放整数值的,比如 1,22 , -55等

整数的类型有:

类型存储大小(单位为字节)值范围
char1-128 即-(2^7) 到 127 (2^7-1)
unsigned char10 到 255 (2^8 - 1)
signed char1-128 即-(2^7) 到 127 (2^7-1)
intsigned int (int)2/4-32,768 (- 2^15 ) 到 32,767 (2^15-1)或 -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 -1)
unsigned int2/40 到 65,535 (2^16-1) 或 0 到 4,294,967,295 (2^32 -1)
short (signed short)2-32,768 (- 2^15)到 32,767 (2^15 -1)
unsigned short20 到 65,535 (2^16 - 1)
long (signed long)4-2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 - 1)
unsigned long40 到 4,294,967,295 (2^32 - 1)

整型的使用细节:

  • 各种类型的存储大小与操作系统、系统位数和编译器有关,目前通用的以64位系统为主;

  • 在实际工作中,c程序通常运行在linux/unix 操作系统下。大众则一般使用windows10(64位);

  • C语言的整型类型, 分为有符号 signed 和无符号 unsigned 两种, 默认是 signed;

  • C程序中整型常声明为int型, 除非不足以表示大数, 才使用long long

  • 有关字节及其大小:

    bit(位): 计算机中的最小存储单位。

    byte(字节):计算机中基本存储单元。

    1. 1byte = 8bit [二进制再详细说, 简单举例一个 short 3 和 int 3 ]
    2. short 3 在内存中占有 2字节
    3. int 3 在内存中占有 4个字节
    4. 1KB = 1024Byte;1MB = 1024KB;从小打到依次还有GB、TB、PB等。

2.3 浮点类型

c语言中的浮点类型可以表示一个小数,比如22.2 , 3.3,-2.3等

类型存储大小值范围精度
float 单精度4 字节1.2E-38 到 3.4E+386 位小数
double 双精度8 字节2.3E-308 到 1.7E+30815 位小数

注:E(n)代表10的n次方

注:

  1. 关于浮点数在机器中存放形式的简单说明:浮点数=符号位+指数位+尾数位 , 浮点数是近似值
  2. 尾数部分可能丢失,造成精度损失。

浮点型的一些使用细节:

  1. 浮点型常量默认为double型 , 声明float型常量时, 须后加‘f’或‘F’。

  2. 浮点型常量有两种表示形式

    • 十进制数形式:如: 5.12 512.0f .512 (必须有小数点)

    • 科学计数法形式:如: 5.12e2 、 5.12E-2

  3. 通常情况下,应该使用double型,因为它比float型更精确

  4. printf("d1=%f ", d1); // 在输出时,默认保留 小数点6位

2.4 字符类型

字符类型可以表示单个字符,字符类型是charchar1个字节(可以存字母或者数字),多个字符称为字符串, 在C语言中 使用 char数组 表示,数组不是基本数据类型,而是构造类型

字符类型的一些使用细节:

  1. 字符常量是用单引号(‘’)括起来的单个字符。 例如: char c1 ='a'; char c3 = '9';

  2. C中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如: char c3 = ‘\n’; // '\n'表示换行符转义后的字符总体为一个

  3. 在C中, char的本质是一个整数,在输出时,是ASCII码对应的字符

  4. 可以直接给char赋一个整数,然后输出时,会按照对应的ASCII 字符输出

  5. char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码。

    char c1 = 'a';
    char c2 = 'b';
    

字符类型的本质:

  1. 字符型存储到计算机中,需要将字符对应的ASCII码值(整数)找出来:

    • 存储:字符’a’——>码值 (97)——>二进制 (1100001)——>存储

    • 读取:二进制(1100001)——>码值(97)——> 字符’a’——>读取(显示)

  2. 字符和码值的对应关系是通过字符编码表决定的(规定好)。

2.5 布尔类型

  1. C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真
  2. 但这种做法不直观,所以我们可以借助C语言的宏定义 。
  3. C语言标准(C99)提供了_Bool 型, _Bool仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1, C99还提供了一个头文件<stdbool.h> 定义了bool代表_Bool, true代表1, false代表0。只要导入 stdbool.h ,就能方便的操作布尔类型了 , 比如 bool flag = false;
  4. 条件控制语句; if
  5. 循环控制语句; while …

3.变量

3.1 变量的创建

在我们了解清楚c中的数据类型后,就需要用数据类型来创建变量

C语言中把经常变化的值称为变量,不变的值称为常量

创建变量的语法形式为:

int age
char zh
double weight

变量在创建的时候给其一个初始值,就叫初始化

int age = 18;
char ch ='w';
double weight =48.0;
unsigned int height = 100

为什么创建变量的时候最好要对其进行初始化?

一段程序结束后,操作系统会对其进行内存回收,但是不会清理该空间内存在的遗留数据,该数据成为垃圾数据。所以在给变量分配内存时,很可能这段内存存在着以前其他程序留下的值。当使用VC编译器时,若编译器发给该变量没有赋值就使用了,就会默认填充一个以”85”开头很大的数字,该数字称为“填充数”,表示该变量没有进行初始化。
所以我们通常对变量,分配好存储空间之后都要对该内存空间进行初始化。

原文链接:https://blog.csdn.net/Mr_zhao11/article/details/71023439

3.2 变量的分类

  • 全局变量:在大括号外部,在整个工程中都可以使用
  • 局部变量:在大括号内部,只在局部范围内使用

image-20240802214425198

如果全局变量和局部名字相同呢?

image-20240802214510194

由示例可见,局部变量会被优先使用,遵从“就近原则”。

3.3 变量的存放

变量创建的本质是:在空间中申请一块空间

内存中存在三个区域,分别是栈区、堆区和静态区

  • 栈区:局部变量存放地
  • 静态区:全局变量存放地
  • 堆区:动态内存分配,malloc、free、calloc等

关于这部分的讲解,CSDN上有很多优秀的文章,下面举例两个

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值