【C语言】数据类型和变量

【思维导图】C语言—数据类型和变量 今天我们来回顾——C语言【数据类型和变量】我们先梳理一下思路:首先学习数据的类型,然后学会用类型去创建变量,接着学习操作符进行变量之间的运算,最后学习 scanf 输入数据, printf 进行数据的打印。回顾的时候最好结合代码的编写,才能更好更直观地理解知识的用法。我已经把思维导图对应的原详细知识的博客贴在下面啦,有知识的遗忘就赶紧翻翻看吧~ 阅读详情


前言

在了解完C语言学习的前提知识后,下面我们将详细地讲解C语言的内容,
我将由易到难、由简到繁带大家串完C语言。


一、数据类型

在生活中,我们会说很多的数据3.14,123,324...
C语言提供了丰富的数据类型来描述生活中的各种数据。
使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
C语言的数据类型分为两类:

  • 自定义类型(由我们自己定义)
  • 内置类型(C语言提供)

如图:
C语言数据类型分类

为了循序渐进的学习,本章节主要探讨内置类型的使用。

1.整形

//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//⻓整型
long [int]
[signed] long [int]
unsigned long [int]

//更长的整形
long long [int]
[signed] long long [int]
unsigned long long [int]

2.浮点型

float
double
long double//不常用

float是单精度浮点型,double是双精度浮点型。

int main() {
    float f = 0.123456789f;
    double d = 0.123456789;

    printf("float: %.15f\n", f); // 打印float类型,期望15位小数
    printf("double: %.15lf\n", d); // 打印double类型,期望15位小数
    return 0;
}

output:

float: 0.123456791043282
//可以发现float类型数据在小数点后9位的数字是随机生成的
double: 0.123456789000000
//而double类型数据后面则会补零

因此,double的精度会更高。

3.字符型

char
[signed] char
unsigned char

在上一期的文章中,我们简单介绍了字符,而字符的类型就是char
例如,我们可以这样类比:
123是整形,即int类型的;
‘a’是字符,是char类型的。

4.布尔型

C 语言原来并没有为布尔值单独设置一个类型,而是使用整数 0 表示假,非零值表示真。
在 C99 中也引入了布尔类型 ,是专门表示真假的。

_Bool

布尔类型的使用得包含头文件 <stdbool.h>
布尔类型变量的取值是:true或者false

_Bool bool = true;

二、数据类型的对比

我们发现,对于整形来说,竟然划分出int,short,long,long long四种类型,可以猜测即使是同一类型,也有很多不同之处,下面我们来进行比较。

1.数据类型的长度

数据类型的长度决定了其取值范围,我们可以使用sizeof操作符来计算长度。

sizeof 是一个关键字,也是操作符,专门是用来计算sizeof操作符数的类型长度的,单位是字节。
字节是什么呢?
字节(Byte)是计算机信息技术中用于计量存储容量和数据传输的基本单位。一个字节由8个二进制位(bits)组成,每个位可以是0或1
说起存储容量单位,我们会联想到手机内存是256GB,没有错,GB也是这样的单位,换算规律如下:
1字节(Byte)=8字位=8个二进制数
1字位(bit)=1个二进制数
1Byte=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

sizeof(类型);
sizeof(表达式);
//后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤小。

所以,我们写下这样的程序:

#include <stdio.h>
int main()
{
 printf("%zd\n", sizeof(char));
 printf("%zd\n", sizeof(_Bool));
 printf("%zd\n", sizeof(short));
 printf("%zd\n", sizeof(int));
 printf("%zd\n", sizeof(long));
 printf("%zd\n", sizeof(long long));
 printf("%zd\n", sizeof(float));
 printf("%zd\n", sizeof(double));
 printf("%zd\n", sizeof(long double));
 return 0;
}

在VS2022 X64配置下的输出:

1
1
2
4
4
8
4
8
8

2.signed和unsigned

细心的同学会发现,为什么会有signed char和unsigned char
C 语言使用 signed 和 unsigned 关键字修饰字符型和整型类型。
signed 关键字,表示一个类型带有正负号,包含负值;
unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。

  • 对于 int 类型:
    默认是带有正负号的,也就是说 int 等同于 signed int 。
    由于这是默认情况,关键字 signed 一般都省略不写,但是写了也不算错。
    int 类型也可以不带正负号,只表示非负整数。这时就必须使用关键字unsigned 声明变量。
signed int a;
//=int a;
unsigned int b;
  • 对于 char 类型:
    C 语言规定 char 类型默认是否带有正负号,由当前系统决定。
    这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是unsigned char 。
signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

3.取值范围

上述的数据类型很多,尤其数整型类型就有short、int、long、long long 四种,为什么呢?
其实每⼀种数据类型有自己的取值范围,也就是存储的数值的最⼤值和最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值:
limits.h 文件中说明了整型类型的取值范围。
float.h 这个头文件中说明浮点型类型的取值范围。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使用这些常量。
• SHRT_MIN , SHRT_MAX :short 的最小值和最大值。
• INT_MIN , INT_MAX :int 的最小值和最大值。
• LONG_MIN , LONG_MAX :long 的最小值和最大值。
• LLONG_MIN , LLONG_MAX :long long 的最小值和最大值。
• UCHAR_MAX :unsigned char 的最大值。
• USHRT_MAX :unsigned short 的最大值。
• UINT_MAX :unsigned int 的最大值。
• ULONG_MAX :unsigned long 的最大值。
• ULLONG_MAX :unsigned long long 的最大值。
举个例子:

部分整形取值范围
就看到一些整形的取值范围了(如图),浮点型的操作方式类似,大家感兴趣可以试一试。


三、变量

了解清楚了类型,我们使用类型做什么呢?类型是用来创建变量的。
什么是变量呢?C语言中把经常变化的值称为变量,不变的值称为常量。

1.变量的创建

变量的创建形式:

 data_type name;
       |   |
       |   |
  数据类型  变量名
  int age; //整型变量
  char ch; //字符变量
  double weight; //浮点型变量

变量名的命名:
变量名属于标识符(标识符是程序员为变量、函数、数组、类、模块等编程实体自定义的名称),所以我们直接学习一下表示符的命名规则:

  1. 字母数字组成:标识符通常以字母(a-z,A-Z)或下划线(_)开头,后面可以跟字母、数字(0-9)或下划线。
  2. 区分大小写:多数编程语言中,标识符是区分大小写的,即myVariable和MyVariable被视为两个不同的标识符。
  3. 避免使用关键字:标识符不能与关键字相同。

关键字如常见的if、else、while、for、return、int
变量在创建的时候就给一个初始值,就叫初始化。

 data_type name = Initial value;
    |        |           |
    |        |           |
  数据类型   变量名       初始值
  int age = 18;
  char ch = 'w';
  double weight = 48.0;
  unsigned int height = 100;

2.变量的分类

• 全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。
• 局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。

#include <stdio.h>

int global = 2023;//全局变量

int main()
{
 	int local = 2018;//局部变量
 	printf("%d\n", local);
 	printf("%d\n", global);
 	return 0;
}

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

#include <stdio.h>
int n = 1000;//全局变量
int main()
{
 int n = 10;//局部变量
 printf("%d\n" ,n);//打印的结果是多少呢?
 return 0;
}

最终打印10,所以当局部变量和全局变量同名的时候,局部变量优先使用。
但是我们还是要避免这种同名情况。

3.常量

常量就是值不可被改变的,在将某个定义为常量之后,它的值是不可被改变的。在C语言当中有四种常量类型。
分别是:
1 字面常量
2 const修饰的常变量
3 #define定义的标识符常量
4 枚举常量

字面常量就是直接写出来的

	123;		//这样直接写出来的就是字面常量
	'abc';

const修饰的常变量
const 关键字用于声明只读变量,即其值在初始化后不能被修改的变量

const double PI = 3.14;

#define定义的标识符常量就是通过 #define 定义,一般使用大写字母

#define PI 3.14

因为生活中有些东西是不变的,所以就可以用到枚举,要使用到枚举关键字enum

enum Sex					//因为有些东西是不变的 所以就定义为枚举常量
{
	MALE,
	FAMALE,
	SECRET
};

四、指针基础

指针是C语言学习的重难点,本文主要讲解指针的基础,后期会展开讲解。

1.地址

比如:某天你想去朋友家玩,是不是要先知道xx小区xx楼xx层xx门牌号,然后找到TA家。这种方式找地址的方式最为快捷。
其实,在计算机中也有类似的处理(会在指针章节详解)
在C语言中创建变量其实就是向内存申请空间,然后得到一个地址。

int a = 10;//向内存申请空间

上述的代码就是创建了整型变量a,内存中申请4个字节,用于存放整数10,其中每个字节都有地址,上图中4个字节的地址分别是:

0x006FFD70
0x006FFD71
0x006FFD72
0x006FFD73

那我们如何能得到a的地址呢?
这里就得学一个操作符(&)取地址操作符

 int a = 10;
 printf("%p\n", &a);//%p占位符打印地址,&a取出a的地址

在这里插入图片描述
那我们通过取地址操作符(&)拿到的地址是一个数值,比如:0x006FFD70,这个数值有时候也是需要存储起来,方便后期再使用的,那我们把这样的地址值存放在哪里呢?答案是:指针变量。

2.指针

 int a = 10;
 int* pa = &a;//取出a的地址并存储到指针变量pa中

指针变量也是一种变量,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址。
这里pa左边写的是 int* , * 是在说明pa是指针变量,而前面的 int 是在说明pa指向的是整型(int)类型的对象。
如果有⼀个char类型的变量ch,ch的地址,要放在什么类型的指针变量中呢?那就是char*了

3.解引用操作符

我们将地址保存起来,未来是要使用的,那怎么使用呢?
我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)
指向的对象,这里必须学习⼀个操作符叫解引用操作符(*)。

int main()
{
 int a = 100;
 printf("%d ",a);
 int* pa = &a;
 *pa = 0;
 printf("%d ",a);
 return 0;
}

上面代码中pa中存储a的地址,再通过解引用操作(*)pa变为0(此时pa = a),使a数值发生变化。
那么结果就是:

100 0

五、总结

通过这次的讲解,我们要学会正确地使用数据类型来创建变量,变量是程序中最基础的构成,所以本期非常重要。接下来,我会继续更新,下期更精彩哦。

关注我,带你学习C语言!o( ̄▽ ̄)o🎉


完

大话C语言变量和数据类型 在《二进制思想以及数据的存储》一节中讲到: 计算机要处理的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的形式存放在内存中的; 我们将8个比特(Bit)称为一个字节(Byte),并将字节作为最小的可操作单元。 我们不妨先从最简单的整数说起,看看它是如何放到内存中去的。 变量(Variable) 现实生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到。计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方便以后查找。这块区域就是 阅读详情

相关推荐

Project 编制进度计划【项目管理】

Project 项目管理编制进度计划详解。

m0_52861684的博客 5084

C语言数据类型和变量

c语言基础

凤年徐的博客 1796

S4HANA - Cost Elements成本要素

SAP这里面的配置逻辑很像,就是先建一个对象,然后不停给这个对象附加一些属性,给一个账户附加编号范围,附加账户组。所有模块的维度都在这个表里,看下图的GL,CO,COPA,AA,ML的都在ACDOCA里。要把这5个类型和六大要素对应,先得把六大要素和账户类型对应下(以下是个人理解,不知道对错):当然那个C是新来的,我觉得放在资产下面也行,就不画图了。S4的嵌入式分析是在业务逻辑都整套嵌入的情况下,预开发了数据模型,所以它能提供的就不仅是原始数据了,它能提供的是包含所有相关联的上下文的信息数据。

weixin_45689053的博客 2392

C语言的数据类型和变量

今天介绍的都是内置类型,自定义类型在后期相应的章节会单独介绍。

2402_86300840的博客 2178

【头歌】链栈的基本操作及应用

另外,在算法的开始和结束时,栈都应该是空的,所以匹配到最后还要判断栈是否为空,若空,则说明匹配成功,返回1。其中表达式只包含三种括号,花括号{}、中括号[]、圆括号(),即它仅由 (、)、[、]、{、}六个字符组成。预期输出: 栈中元素依次为:12 47 5 8 6 92 45 63 75 38 4 29 弹出的栈顶元素 e=29 栈空否:0(1:空 0:否) 栈顶元素 e=4 栈的长度为11 清空栈后,栈空否:1(1:空 0:否)// 若栈不空,则用e返回S的栈顶元素,并返回OK;

qq_39977056的博客 4383

高通SDX55平台:5G速率问题排查分析方法

和大家分享一下高通5G平台5G速率问题排查分析方法。

四儿家的小祖宗的博客 5217

C语言变量和数据类型

从数据在内存中的存储方式中可以得知 计算机要处理的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的形式存放在内存中的; 我们将8个比特(Bit)称为一个字节(Byte),并将字节作为最小的可操作单元。 我们先从最简单的整数说起,看看它是如何放到内存中去的。 变量(Variable) 在生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到。计算机也是这个道理...

weixin_45743799的博客 692

YOLOv11【第六章:模型压缩与极致优化篇·第15节】YOLOv11 专用剪枝工具库使用指南!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1312

【C语言】C语言的数据类型和变量

本文系统介绍了C语言的数据类型和变量。主要分为内置数据类型(字符型、整型、浮点型、布尔类型)和变量创建、分类两部分。 数据类型部分详细讲解了char、int、float等常用类型及其有符号/无符号版本,介绍了sizeof运算符的使用方法及注意事项,并分析了各种数据类型的长度和取值范围。 变量部分说明了变量的创建语法和初始化方式,区分了全局变量(大括号外部定义)和局部变量(大括号内部定义)的用法范围。 文章通过代码示例演示了类型定义、变量声明和sizeof操作的实际应用,为C语言基础学习提供了系统性的数据类型

qq_64809564的博客 1174

ABAP CDS SELECT, parameters 全面解析:把参数化视图玩明白(含可运行示例)

这篇技术博客介绍了ABAP CDS中参数化视图的用法与实践。文章从业务需求出发,解释了参数化视图的必要性,并详细说明了语法规则、参数类型匹配、视图内部参数引用等关键点。重点展示了在JOIN和ASSOCIATION中传递参数的写法,提供了航线分析的完整业务案例和可运行代码示例。文章还总结了视图实体与DDIC视图的差异、会话变量使用技巧等实践要点,特别强调了JOIN中必须显式传参的语法要求。通过真实场景演示,帮助开发者掌握参数化CDS的高效应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 358

抖音 webmssdk 签名算法解析:X-Dynosaur / X-Gnarly / X-Bogus 生成原理

它只依赖设备指纹/环境编码与随机数,与 query 内容无关,因此可以独立于 Dynosaur/Gnarly 生成。

猫敷雪 197

C语言中的数学——C语言数据类型和变量(上)

在现实生活中,数据一直是我们身边不可或缺的一部分,我们通过收集数据来归纳内容、了解信息和规律。当计算机出现了之后,同时出现了将数据导入到计算机帮助我们去计算数据、推断趋势的需求。为了适应这一需求,让计算机更方便地处理数据和计算数据,C语言设计并提供了丰富的数据类型来描述生活中的各种数据。我们通过常识和所学的知识,一般都知道数据是什么东西。但提到数据类型,估计大家都会 “哑口无言” 了吧。那到底数据类型是什么呢?现在,就让我们来了解一下吧!😗。

xxpigpigpigxx的博客 2072

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 645

C 语言数据类型和变量

编译器需要知道变量的数据类型,以便正确操作和存储数据。注:bool类型详细请看:()不同数据类型的取值范围可以在。在 C99 标准中,引入了。每种数据类型的长度可以用。仅在函数内部可见,而。

maomi_9526的博客 3127

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言自学——C语言数据类型和变量

它的第⼀个参数是⼀个格式字符串,里面会放置占位符(与编译器如何解读用户的输入,需要提取的数据是什么类型。这是因为C语言的数据都是有类型的,(与printf() 的占位符基本一致),scanf() 必须提前知道用户输入的数据类型,才能处理数据。sizeof 是⼀个关键字,也是操作符,专门是用来计算sizeof操作符数的类型长度的,单位是字节。类型是用来创建变量的。每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不 同,存储的数据范围就有所差异。

yanqiaofanhua的博客 1005

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【C语言数据类型和变量】

C语言数据类型和变量摘要 本文系统介绍了C语言中的数据类型和变量相关概念。主要内容包括:1) C语言内置数据类型分类(字符型、整型、浮点型、布尔型);2) signed和unsigned关键字的区别;3) 各种数据类型的取值范围;4) 变量的定义和使用;5) 常用操作符(算术、赋值、单目);6) 强制类型转换;7) 输入输出函数scanf和printf的基本用法。文章重点讲解了sizeof运算符的使用方法及其返回值类型size_t,并通过大量代码示例演示了不同数据类型的长度计算和变量声明方式。这些基础知识是

2401_85944172的博客 1484

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 学习C语言的前提知识(下)
下一篇: 【C语言】printf与scanf
2023dream
博客等级 码龄3年 160粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023dream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值