当前位置: 首页 > news >正文

C语言数据类型与变量

一、数据类型

1.字符型

char

2.整形

short 【int】

int

long 【int】

long long 【int】

3.浮点型

float

double

long double

4.布尔型(使用需要包含头文件<stdbool.h>)

_Bool

取值为true或false

5.各种数据类型的长度

需要用到sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算 sizeof 的操作符数的类型⻓度的,单位是
字节,sizeof 操作符的操作数可以是类型,也可是变量或者表达式

sizeof( 类型 ) sizeof 表达式

(1)sizeof后面跟的不是类型而是表达式的时候可以省略后面的括号

(2)表达式不参与真实的运算,只根据类型得出大小

(3)计算结果的类型为size_t

(4)sizeof中的表达式不计算(sizeof 在代码进⾏编译的时候,就根据表达式的结果的类型,推到并确定了类型的⻓度,⽽表达式 真要被执⾏,却要在程序运⾏期间才会发⽣,如果在编译期间已经将 sizeof 处理掉了,所以在运⾏ 期间就不会执⾏表达式了)

提醒:sizeof 运算符的返回值,C语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给 系统⾃⼰去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是 unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long , 对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。 C语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返 回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是 unsigned long long 。

各数据类型的长度

#include <stdio.h> int main() { printf("%zd\n", sizeof(char));//1 printf("%zd\n", sizeof(_Bool));//1 printf("%zd\n", sizeof(short));//2 printf("%zd\n", sizeof(int));//4 printf("%zd\n", sizeof(long));//4 printf("%zd\n", sizeof(long long));//8 printf("%zd\n", sizeof(float));//4 printf("%zd\n", sizeof(double));//8 printf("%zd\n", sizeof(long double));//在vs上是8个字节,在gcc上测试是16 return 0; }

二、signed和unsigned

C语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字,表⽰⼀个类型带有正负号,包含负值; unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。 对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。

(1)整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。

(2)unsigned int中的int可以省略

(3)字符类型char也可以设置signed和unsigned,但C语⾔规定 char 类型默认是否带有正负号,由当前系统决定

三、数据类型的取值范围

为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。

• SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值。

• 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的最⼤值。

四、变量

1.变量的创建

规则:数据类型+变量名

变量命名的⼀般规则:

• 只能由字⺟(包括⼤写和⼩写)、数字和下划线(`_`)组成。

• 不能以数字开头。

• ⻓度不能超过63个字符。

• 变量名区分⼤⼩写。

• 变量名不能使⽤关键字。
变量在创建的时候就给一个初始值叫做初始化

2.变量的分类

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

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

如果局部变量和全局变量名称相同,则优先使用局部变量

3.变量的存放

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

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

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

五、算数操作符

指的是+ - * / % ,这些操作符都是双⽬操作符(也被叫做运算符)

(1)+与-对应加减法

(2)*对应乘法

(3)/对应除法

但是如果除号的两端都是整数,则只执行整数除法,得到的结果为整数

int a=6; int b=4; int c=a/b;//结果为1 //若想要运算结果为浮点型,除号两端至少有一个数为浮点型

(4)%对应求模运算(只能用于整数)

负数的求模规则:符号由运算符前面的那个数字来定

六、赋值操作符

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

int a=100;//初始化 b=200;//赋值

1.连续赋值

从右往左依次赋值(不建议连续赋值,不易于理解)

2.复合赋值符

+= -= *= /= %= >>= <<= &= |= ^=

七、单目操作符

++ -- -(负) +(正)

1.前置++/--:先+1/-1,再使用

2.后置++/--:先使用,后+1/-1

八、强制类型转换

使用方法:(类型)

九、scanf和printf介绍

1.printf用法略

(1)占位符:

%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 :⼗进制 short int 类型。

• %ho :⼋进制 short int 类型。

• %hx :⼗六进制 short int 类型。

• %hu :unsigned short int类型。

• %ld :⼗进制 long int 类型。

• %lo :⼋进制 long int类型。

• %lx :⼗六进制 long int类型。

• %lu :unsigned long int 类型。

• %lld :⼗进制 long long int 类型。

• %llo :⼋进制 long long int 类型。

• %llx :⼗六进制 long long int 类型。

• %llu :unsigned long long int 类型。

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

• %Lf :long double 类型浮点数。

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

• %o :⼋进制整数。

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

• %s :字符串。

• %u :⽆符号整数(unsigned int)。

• %x :⼗六进制整数。

• %zd : size_t 类型。

• %% :输出⼀个百分号。

(2)输出格式

限定宽度:

printf("%5d",123);

%5d表示这个占位符宽度至少为5,若不满5个,前面自动添加空格

输出默认是右对齐

printf("-%5d",123);

此为左对齐

对于小数,小数的默认精度为小数点后六位

printf("%12f",123.45);

上述式子的输出结果前面有两个空格

(3)%+可以确保输出的值总是带有正负号

(4)可以限定小数的位数,如“%.2f”限定小数只有两位

可以与限定宽度的占位符同时使用

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

printf("%*.*f\n", 6, 2, 0.5);

(5)输出部分字符串

形式:%.[m]s 其中[m]表示一个数字

2.scanf

基础用法略

(1)变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址, 即将变量 i 的地址指向⽤⼾输⼊的值。 如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符

(2)当scanf处理多个输入时,scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响 scanf() 解读数据。另外,⽤⼾使⽤回⻋键,将输⼊分成⼏⾏,也不影响解读

(3)scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存 进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条 件的字符为⽌

// ⽤⼾输⼊ " -13.45e12# 0" scanf("%d", &x); printf("%d\n", x); scanf("%f", &y); printf("%f\n", y);

如上述例子,第一次读取读取到-13,第二次读取.45e12

但第二次打印的结果可能与实际结果不一致,这是因为小数在储存的时候不精确,再乘上e12将误差放大了很多

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

(5)按ctrl+z可以提前结束输入

(6)scanf常用的占位符与 printf() 的占位符基本⼀致:
• %c :字符。
• %d :整数。
• %f : float 类型浮点数。
• %lf : double 类型浮点数。
• %Lf : long double 类型浮点数。
• %s :字符串。
• %[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会
停⽌。

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

占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \0
scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,
很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓ 度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。

3.赋值忽略符

只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃

http://www.jsqmd.com/news/722932/

相关文章:

  • Driver Store Explorer:Windows系统驱动管理的终极解决方案
  • CtxPort:AI对话结构化剪贴板,一键导出Markdown
  • Android14 增加 property 记录系统当前前台应用的 packageName and className
  • 稀疏混合专家模型(MoE)负载均衡技术演进与实践
  • Sage智能体平台:从LLM到生产级自动化工作流的工程实践
  • 深圳本地特色美食推荐有哪些,去哪里吃比较正宗?
  • 2026可靠聚酯防爆箱优质厂家推荐榜 - 优质品牌商家
  • CaTok:1D因果图像标记化方法解析与应用
  • F-CoT技术:结构化提示优化大语言模型推理效率
  • DLSS Swapper终极指南:三步实现游戏DLSS智能管理,告别手动替换烦恼
  • 图像降噪算法演进史:从均值滤波到非局部均值(NL-Means),为什么说它是‘里程碑’?
  • 【PHP 8.9类型系统终极指南】:Strict Type Enforcement如何将运行时错误拦截在编译前?
  • 终极指南:如何用OnStep打造专业级智能望远镜控制系统
  • DYMO-Hair:机器人操作的头发动力学建模技术
  • 【2025最前沿】PHP 9.0原生async/await与AI流式响应融合调优:3步实现端到端P99<85ms
  • 基于MCP协议与Truelist API,为AI助手集成专业邮箱验证能力
  • 代码大语言模型训练框架与优化实践
  • NVIDIA CUDA-Q v0.8量子编程框架核心功能解析
  • 学Simulink——基于Simulink的电池热管理系统(BTMS)多目标优化​
  • Win11Debloat:Windows系统优化工具,轻松实现高效系统清理与隐私保护
  • 小型语言模型(SLMs)的优势与应用实践
  • 2026年Q2成都搬家公司选择攻略:电话与品牌双维度 - 优质品牌商家
  • LLM评估准则偏差解析与优化实践
  • Windows命令行文件定位工具extra-locate.cmd:原理、实现与效率提升实践
  • Switchyard:基于Python的用户空间网络仿真与协议测试实践指南
  • 如何用LeagueAkari智能工具集提升英雄联盟游戏效率的完整指南
  • 曾经对程序员最好的公司,倒下了
  • 扩散模型文本条件生成机制与调制引导技术解析
  • 2026年Q2成都专业小红书运营公司技术服务解析 - 优质品牌商家
  • 智能体可观测性实践:用Agent-Lens实现LLM智能体全链路追踪与评估