news 2026/4/17 22:44:11

C语言的数据类型和变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言的数据类型和变量

目录

1. 数据类型介绍

2. signed 和unsigned

3. 数据类型的取值范围

4. 变量

5. 算术操作符:+、-、*、/、%

6. 赋值操作符:=和复合赋值

7. 单⽬操作符:++、--、+、

8. 强制类型转换

9. scanf和printf介绍


1. 数据类型介绍(内置类型)

1.1字符型character

字符的英文单词是character,在C语言中使用char表示字符类型

1.2整型integer

1.3浮点型float

float double long double

1.4布尔型bool(C99中引入)

布尔值:表示真假

_Bool

使用时要包含头文件<stdbool.h>

代码演示:

1.5各种数据类型的长度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。

1.5.1sizeof

sizeof是关键字也是操作符,专门用来计算sizeof的的操作数的类型长度,单位是字节

sizeof的计算结果是size_t类型的,要打印出来可以使用%zu的占位符

sizeof(数据类型) sizeof 表达式

1.5.2数据类型长度

x64环境:

1.5.3sizeof 中表达式不计算

2. signed 和unsigned

C语⾔使⽤signed 和 unsigned关键字修饰字符型整型类型的。

signed关键字,表⽰⼀个类型带有正负号,包含负值

unsigned关键字,表⽰该类型不带有正负号,只能表⽰零和正整数

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

整数变量声明为unsigned的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的signed short int的取值范围是:-32768~32767,最⼤是32767;⽽unsigned shortint的取值范围是:0~65535,最⼤值增⼤到了65535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。

下⾯的定义是VS2022环境中,limits.h中相关定义:

char与int 不同:

3. 数据类型的取值范围


怎么打开limits.h这个文件呢?(float.h同理)

在电脑上去官网下载一个Everything即可


limits.h

float.h

4. 变量

4.1变量的创建

了解清楚了类型,那么类型是用来干什么的呢?类型是用来创建变量的;

变量顾名思义就是变化的量,与之概念相对的就是常量

那变量的命名规则是?(给变量起名还应该尽量使它的名字有意义

  1. 不能以数字开头
  2. 只能由字母(区分大小写)、数字下划线(‘_’)组成
  3. 长度不能超过63个字符
  4. 变量名区分大小写
  5. 变量名不能是关键字
data_type name | | | | 变量类型 变量名

初始化

即变量创建的时候给它一个值

int age=18; float weight=55.5; char ch='w';

4.2变量的分类

4.2.1全局变量

在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。

4.2.2局部变量

在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。

*当全局变量与局部变量冲突的时候局部变量优先

全局变量和局部变量在内存中存储在哪⾥呢?

⼀般我们在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区

1.局部变量是放在内存的栈区

2.全局变量是放在内存的静态区

3.堆区是⽤来动态内存管理

变量创建的本质是在内存中开辟空间

5. 算术操作符:+、-、*、/、%

在写代码时候,⼀定会涉及到计算。

C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是:+-*/%,这些操作符都是双⽬操作符(操作符左右两边各有一个操作数。例如:操作数1+操作数2。)

注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。

5.1+和-

5.2*

int main() { printf("%d\n",4*5); return 0; }

5.3/

除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。

上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是 1.5 。原因就在于C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分

如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时C语⾔就会进⾏浮点数除法

5.4%

运算符 % 表⽰求模(余)运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点 数。

负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定.

6. 赋值操作符:=和复合赋值

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。

int a=0;//初始化 a=10; //赋值

6.1连续赋值

连续赋值,从右向左依次赋值

int c=1; int a=0; int b=0; a=b=c+1;//连续赋值

6.2复合赋值

以上只是C语言中的部分复合赋值操作符,后续还会学习到更多。

7. 单⽬操作符:++、--、+、-

前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称 为单⽬操作符。++ 、-- 、 +( 正 ) 、-( 负 )就是单⽬操作符的。

7.1++和--

++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--.

如果想让变量a自增1有几种方法?

int a=0; a=a+1;//1 a+=1;//2 a++;//3 ++a;//4

--用法与++同理

7.2+和-

这⾥的+是正号,-是负号,都是单⽬操作符

运算符+对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

运算符-⽤来改变⼀个值的正负号,负数的前⾯加上 就会得到正数,正数的前⾯加上 会得到负数。

8. 强制类型转换

在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:

(类型)
int a=3.14; //这里a是int类型,而3.14是double类型,如果强行将3.14赋值给int的编译器会报警告 //为了消除警告,强制类型转换就派上用场了

使用强制类型转换之后的代码:

int a=(int)3.14

9. scanf和printf介绍

9.1printf

9.1.1基本用法

printf()的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format,表示可以定制输出⽂本的格式。

#include<stdio.h> int main() { pfintf("Hello woeld"); return 0; }

上⾯命令会在屏幕上输出⼀⾏⽂字“HelloWorld”。

printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。

为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符\n

#include<stdio.h> int main() { printf("Hello world\n"); return 0; }

printf()是在标准库的头⽂件 stdio.h定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这 个头⽂件

9.1.2占位符

printf() 可以在输出⽂本中指定占位符。

所谓“占位符”,就是这个位置可以⽤其他值代⼊。(可以理解为大学生拿课本占座)

printf("%d",1)

输出⽂本⾥⾯可以使⽤多个占位符

printf("%s is %d years old",小明,18);

9.1.3占位符列举

%a :⼗六进制浮点数,字⺟输出为⼩写。

%A :⼗六进制浮点数,字⺟输出为⼤写。

%c :字符。//char

%d :⼗进制整数(有符号的10进制整数)。//int

%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。

%i :整数,基本等同于 %d 。

%f :⼩数(包含 float 类型和 double 类型)。//float%f double-%lf

%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。

%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。

%hd :⼗进制shortint类型。

%ho :⼋进制shortint类型。

%hx :⼗六进制shortint类型。

%hu :unsignedshortint类型。

%ld :⼗进制longint类型。

%lo :⼋进制longint类型。

%lx :⼗六进制longint类型。

%lu :unsignedlongint类型。

%lld :⼗进制longlongint类型。

%llo :⼋进制longlongint类型。

%llx :⼗六进制longlongint类型。

%llu :unsignedlonglongint类型。

%Le :科学计数法表⽰的longdouble类型浮点数。

%Lf :longdouble类型浮点数。

%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o :⼋进制整数。

%p :指针(⽤来打印地址)。

%s :字符串。

%u :⽆符号整数(unsignedint)。

%x :⼗六进制整数。

%zd : size_t 类型。

%% :输出⼀个百分号

9.1.4输出格式

printf()可以定制占位符的输出格式

9.1.4.1限定宽度

printf() 允许限定占位符的最⼩宽度

上⾯⽰例中, %5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的% 的后⾯插⼊⼀个 -号。

9.1.4.2总是显示正负号

默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 +

9.1.4.3限定小数位数

输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写 成%.2f

这种写法可以与限定宽度占位符,结合使⽤

最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替通过 printf() 的参数传⼊

9.1.4.4输出字符串

%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤%.[m]s指定输出的⻓度,其中[m]代表⼀个数字,表⽰所要输出的⻓度。

9.2scanf

当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数 ,如果需要将变量的值输出在屏幕上的时候可以使⽤ printf 函数。

9.2.1基本用法

scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 它的原型定义在头⽂件 stdio.h。 scanf() 的语法跟 printf() 类似

int i=0; scanf("%d"&i);

9.2.2返回值

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0。 如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)

EOF-endoffile ⽂件结束标志.

9.2.3占位符

scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。

%c :字符。

%d :整数。

%f : float 类型浮点数。

%lf : double 类型浮点数。

%Lf : long double 类型浮点数。

%s :字符串。

%[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。

上⾯所有占位符之中,除了%c以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返 回当前第⼀个字符,⽆论该字符是否为空格。

9.2.4赋值忽略符

有时,⽤⼾的输⼊可能不符合预定的格式.

上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。

10.我的gittee仓库(可查阅以上代码)

https://gitee.com/lei-zefan/breake.c/blob/master/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:37:22

从LLM幻觉到生产级健壮性,智能代码生成错误检测与修复全链路落地手册,覆盖GitHub Copilot/CodeWhisperer/Tabnine三大引擎

第一章&#xff1a;从LLM幻觉到生产级健壮性——智能代码生成错误检测与修复的演进本质 2026奇点智能技术大会(https://ml-summit.org) 大型语言模型在代码生成任务中展现出惊人潜力&#xff0c;但其输出常伴随逻辑错位、API误用、边界条件遗漏等隐性幻觉——这些错误在单元测…

作者头像 李华
网站建设 2026/4/17 22:36:22

终极跨平台漫画阅读神器:nhentai-cross完整使用指南

终极跨平台漫画阅读神器&#xff1a;nhentai-cross完整使用指南 【免费下载链接】nhentai-cross A nhentai client 项目地址: https://gitcode.com/gh_mirrors/nh/nhentai-cross 还在为在不同设备上阅读漫画而烦恼吗&#xff1f;nhentai-cross正是你需要的跨平台漫画阅…

作者头像 李华
网站建设 2026/4/17 22:32:02

VisualCppRedist AIO:一站式解决Windows运行库兼容性问题的终极方案

VisualCppRedist AIO&#xff1a;一站式解决Windows运行库兼容性问题的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过游戏打不开、软…

作者头像 李华