前言

这章我们主要介绍C语言中的数据类型与变量,掌握变量的使用,熟练使用变量是编写高效、可维护C程序的基础,直接影响后续对内存管理概念的理解深度。

在这里插入图片描述

一、C语言变量

C语言中的变量是程序用于存储数据的基本容器,其本质是程序在内存中申请的一块存储空间。程序中变量定义需要指定数据类型和变量名,语法格式为数据类型 变量名 ,变量必须先定义后使用,建议在定义时赋予初始值以避免不可预期的错误。
变量作为数据载体,负责在程序不同部分间传输和暂存信息。例如在计算正方形的面积一段程序代码中,正方形的边长可以用X这个变量来存储,正方形的面积可以用Y这个变量来存储。

在这里插入图片描述

1.编写一个变量定义与运算的代码

面积的结果我们可以定义一个变量Y,方便查看面积值,边长我们定义一个变量X,那么面积Y=X*X。假如边长X为4,那么面积就应该是16。我们这段代码就可以这么写:

#include <stdio.h>
 
int X;//定义变量X,数据类型为整型,暂时可以理解成整数,代码以分号结束
int Y;//定义变量Y,数据类型为整型,暂时可以理解成整数,代码以分号结束

int main(void)
{
	X=4;//变量赋值为4
	Y=X*X;//计算X乘X的值,计算结果放在=号的左边,计算结果的值存到Y变量,代码以分号结束
  return 0;
}

我们把前面的代码复制到main.c中,如下图所示,然后编译,提示编译没有错误。
在这里插入图片描述

2.进入代码调试

点击调试按钮,进入调试阶段,进入调试之后,光标就会跳到main函数。
在这里插入图片描述

3.查看变量的数值

进入调试界面后,如下图所示,我们要查看变量的数值,就点击菜单栏View->Watch Windows->Watch1。
在这里插入图片描述
我们接着把X,Y两个变量拖入到Watch1窗口,就能查看变量的数值了,初始化值都为0。
在这里插入图片描述

我们接着把X,Y两个值的显示方式改成10进制显示,默认是16进制显示。
在这里插入图片描述
点击单步执行,就能看到变量X值的变化,执行完X=4;语句,X值就会变成4。
在这里插入图片描述
再次点击单步执行,执行完Y=X*X;的语句,Y值就会变成16,程序计算就结束了,跟理论计算一致。
在这里插入图片描述

4.查看变量的存储地址

每个变量都会分配一个系统内的存储地址,我们查看内存空间查看,通过菜单View->Memory Windows->Memory1。

在这里插入图片描述

在Memory1的窗口内,输入&X,&这个字符就是取地址的意思,就能查到变量X在系统中的地址,X地址为0x20000008,内容值是4。
在这里插入图片描述
通过以上调试,对变量的理解应该更深了,了解了变量的用处,知道变量数据的存储地址以及用法,对于变量名有个要求,只能由字母(A-Z, a-z)、数字(0-9)和下划线(_)组成,变量名的第一个字符必须是字母或下划线,不能以数字开头。

二、C语言中的数据类型

数据类型是C语言的基石,深入理解和熟练运用数据类型是成为合格C程序员的必要条件。它不仅影响程序的正确性和效率,还关系到代码的质量和可维护性。正确选择数据类型可以确保数据被正确存储和操作。例如,使用整型来存储整数,浮点型来存储小数,可以避免数据精度问题。如果错误地用整型来存储小数,会导致小数部分被截断。了解不同数据类型占用的内存大小有助于高效使用内存。例如,在嵌入式系统等内存受限的环境中,选择合适的数据类型(如使用short而不是int)可以节省内存。
我们常见的数据类型有以下几种:
整型 (int, short, long, long long, char)。
浮点型 (float, double, long double)。
枚举类型 (enum)。

1.整型 (int, short, long, long long, char)

在32位系统中,int 类型变量通常是4字节(32位)空间,数值范围是 -2^31 ~ 2^31-1,short是2字节(16位)空间,char是1字节(8位)空间,long是4字节(32位)空间。long long是8字节(64位)空间。
在整型数据类型中,由于还有负数存在,所以还有修饰符定义: signed(有符号), unsigned(无符号),如果不加修饰符,默认就是有符号变量,signed 可以表示负数、零和正数;unsigned 只能表示零和正数,但正数范围更大,比如signed short 数值范围是-2^15~ 2^15-1(-32768 到 32767),如果是unsigned short数值范围是0~2^16-1(0 到 65535)。
接下来举例定义几个整型变量:
unsigned char A;//定义无符号1字节变量A
char A;//定义有符号1字节变量A
signed char A;//定义有符号1字节变量A
unsigned short A;//定义无符号2字节变量A
unsigned long A;//定义无符号4字节变量A
为了更好的理解有符号与无符号,我们举个下面的例程:

#include <stdio.h>
unsigned char A;//1字节无符号数,数值范围0 到 255
signed char B;//1字节有符号数,数值范围-128 到 127
int main(void)
{
	A=255;//赋值255
	B=255;//赋值255
	return 0;
}

我们把前面的代码复制到main.c中,如下图所示,然后调试,可以看到无符号的数值范围更大,但不能显示负数。有符号数可以显示负数,但是数值范围小。
在这里插入图片描述

2.浮点型 (float, double, long double)

常用float与double。
float :是C语言中的单精度浮点数类型,主要是用在小数运算的场合。
大小:通常占用 4个字节(32位)。
正数范围:约 1.2 × 10⁻³⁸ 到 3.4 × 10³⁸。
负数范围:约 -3.4 × 10³⁸ 到 -1.2 × 10⁻³⁸。
精度:大约 6-9 位有效数字。
double:是C语言中的双精度浮点数类型,提供比 float 更高的精度和更大的范围。
大小:通常占用 8个字节(64位)。
正数范围:约 2.2 × 10⁻³⁰⁸ 到 1.8 × 10³⁰⁸
负数范围:约 -1.8 × 10³⁰⁸ 到 -2.2 × 10⁻³⁰⁸
精度:约 15-17位有效数字

接下来举例定义float与double变量:
float A;//定义float变量A
double B;//定义double变量B
为了更好的理解浮点运算,我们举个下面的例程:

#include <stdio.h>
double a=3.14159;//定义变量a,double类型,数值是3.14159
double b=0.2;//定义变量b,double类型,数值是0.2
double c;//定义变量c,double类型
int main(void)
{

	c = a + b;//计算c值
  return 0;
}

我们把前面的代码复制到main.c中,调试,如下图所示,带浮点的小数运行计算正确,3.14159+0.2=3.34159。
在这里插入图片描述

3.枚举类型 (enum)

枚举类型(enumeration)是C语言中一种基本数据类型,它允许程序员定义一组命名的整数常量。注意这边指的是常量,常量是指在程序运行过程中其值不会被改变的量。使用枚举类型可以提高代码的可读性和可维护性,枚举本质上是char或者int类型。
定义枚举类型写法如下:
enum 枚举类型名 {
枚举常量1,
枚举常量2,

};
定义枚举变量如下:
enum 枚举类型名 变量名;

接下来举例定义enum:
enum Weekday { MON = 1, TUE, WED, THU, FRI, SAT, SUN };//常量MON 为1,常量TUE就是2,后面的常量数值依此类推
enum Weekday A= TUE;//定义变量A是枚举类型
为了更好的理解枚举,我们举个下面的例程:

#include <stdio.h>
enum Weekday { MON = 1, TUE, WED, THU, FRI, SAT, SUN };//常量MON 为1,常量TUE就是2,后面的常量数值依此类推
enum Weekday  A,B,C;//定义变量A,B,C是枚举类型
int main(void)
{
	A= TUE;//常量TUE赋值给变量A
	B= THU;//常量THU赋值给变量B
	C= SUN;//常量SUN赋值给变量C
	return 0;
}

我们把前面的代码复制到main.c中,调试,如下图所示,可以看到变量ABC的值,与常量的数值对应。
在这里插入图片描述

三、STM32单片机工程中的变量定义

我们STM32单片机工程会经常定义变量,下面就是STM32单片机定义1字节变量的常用写法,uint8_t代表定义的数据是1字节无符号数,下图中RX_len就是自己定义的1字节变量,用来表示串口接收的数据长度。

在这里插入图片描述
typedef 是 C编程语言中的一个关键字,它允许你为已有的数据类型定义一个新的名称,它可以使代码更加清晰和易读。
uint8_t 是通过 typedef 关键字将 unsigned char 重新定义的别名,表示8位无符号整数类型,一般在头文件里会做好定义。

在这里插入图片描述

总结

变量是程序存储和操作数据的基本单元,而数据类型定义了变量可以存储的数据种类和范围。没有变量和数据类型,程序无法处理数据,学习C语言的变量和数据类型是掌握该语言的基础,对于编写正确、高效、可维护的程序至关重要。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐