C语言数据类型和变量(笔记)

一.数据类型介绍

在C语言中,需要知晓数据类型才能让编译器更好地操作数据

类型有:1.内置型:字符型,整型,浮点型,布尔类型

                2.自定义类型:数组,结构体,枚举,联合体

这里先了解内置型

1.字符型

2.整型 

3.浮点型

float——单精度浮点类型

 double——双精度浮点类型

4.布尔类型

4.1.C语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 在 C99 中也引⼊了 布尔类型,是专⻔表示真假的

或者两者都可以用

4.2.布尔类型的使⽤得包含头⽂件<stdbool.h>

4.3.布尔类型变量的取值是:ture或false , 编译器一般默认0为假,非0为真

5.提示:以上[ ]中的字符,均可省略

***补充:6.各数据类型长度

6.1.sizeof操作符:sizeof是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节(Byte) , Byte=8bit ;

6.2.sizeof操作符的操作数可以是类型,也可是变量或者表达式;

6.3.sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出大小;

6.4.sizeof的计算结果是size_t类型的,打印使用%zd;

6.5.C语言规定sizeof(long)  >=  sizeof(int) , doublelong double同理;

(以上可以得知各类型长度)

 6.6.C语言中没有规定sizeof运算符的返回值的类型,由系统去决定,就会有以下可能性:

       unsigned int    ————使用%u打印

       unsigned long     ————使用%lu打印

       unsigned long long    ————使用%llu打印

    解决:C语言对此创建了一个类别名size_t , 用来统一表示sizeof的返回类型,可以直接对应unsigned int和unsigned long long ,而size_t 用%zd打印

6.7.如果sizeof中放的是表达式,则表达式不会真实计算

例:

错误思维:s=10+1=11 , 11为int类型,第一个输出4

原因:sizeof不真实计算,s为short类型,则按s原来的类型输出

总结:sizeof在代码进⾏编译的时候,就根据表达式的类型确定了,⽽表达式的执⾏却要在程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了

二.signed和unsigned

1.两者都是来修饰  字符型  和  整型  类型的;

2.signed关键字,表示⼀个类型带有正负号,包含负;

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

3.对于int类型,默认是带有正负号的,也就是说,int等同于signed int;

4.对于char,char是否有符号取决于编译的实现,大部分编译器上char和signed char等价;

5.对于无符号整数,用%u打印;

6.整型变量声明为unsigned的好处是同样⻓度的内存能够表示的最⼤整数值,增⼤了⼀倍

例如:16位的signed short int的取值范围是-32768~32767,最大是32767;

       而unsigned short int的取值范围是0~65535,最大值增大到65535

三.数据类型的取值范围

可以使用everything软件查看系统上不同数据类型的极限值:

limits.h 文件说明了整型类型的取值范围;

float.h这个头文件说明浮点型类型的取值范围;

四.变量

1.创建:data_type name;

                     |             |

           数据类型      变量名

变量在创建时会给一个初始值,这叫初始化;

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

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

注意:当局部变量和全局变量同名的时候,局部变量优先使⽤

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

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

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

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

五.算数操作符:+,-,*,/,%

算数操作符是为了方便计算,分为双目操作符(有两个操作数)单目操作符(只有一个操作数);也被称作运算符

1.+,-,*

对应加法,减法,乘法;

2./

对应除法,

注:2.1.除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数;

            C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分;

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

3.%

对应求模(余)运算,即返回两个整数相除的余值。

注:3.1.这个运算符只能用于整数,不能用于浮点数

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

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

1.=是一个随时可以给变量赋值的操作符;

2.连续赋值:

不过还是尽量不要这么写分开,方便调试

3.复合赋值符:化简写法

上下两条语句等价

同理,有:+=  ,-=   ,*=   ,/=   ,%=   

           还有:>>=   ,<<=   ,&=   ,|=   ,^=(暂时不了解)

七.单目操作符:++,--,+(正),-(负)

1.++和--:

分为前置和后置

前置:先a加1,后使用a的值

后置:先使用a的值,后给a加1

2.+和-:

都是单目操作符,表示正负,和数学里的用法一致

八.强制类型转换

例子:如果,会报错:

那么可以将他强制转化类型:,这样就不会报错了

注意:会损失数据,少用

九.scanf和printf介绍

scanf:

1.基本用法

功能:打印;需要头文件:stdio.h;

2.占位符:

所谓“占位符”,就是这个位置可以⽤其他值代入

常见的有:%c:字符;     %d:十进制整数;     %f:小数(包含float和double类型) ;

                  %hd:十进制 short int类型;     %lu:unsigned long int 类型;     

                   %lf:long double 类浮点数;     %p:指针(用来打印地址);

                  %s:字符串;     %u:无符号整数(unsigned int);     %x:十六进制整数;   

                  %zd:size_t类型     %%:输出一个百分号......

注:printf()参数与占位符时一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个,如果参数个数少于对应的操作符,printf()可能会输出内存中的任意值。

3.输出格式:

printf可以定制输出格式

3.1.限定宽度:

例1中:%6d指的是这个占位符的宽度⾄少为5位,如果不满5位,对应的值的前⾯会添加空格

         而%-6d指的是在输出内容后⾯添加空格;

例二中:%14f表示表示输出的浮点数最少要占据12位,而小数的默认显示精度是小数点后6位,所以在前面补4个空格

特别注意:小数点占一个宽度

3.2.显示正负号:

使用%+d进行打印,这样输出的值总是带有正负号

3.3.限定小数位数:

情况1:限定小数点后的位数 保留n位,占位符使用%.nf

例:

情况2:同时限定宽度为n和小数点位为m,占位符使用%n.mf

例:

3.4.限制输出字符串:

可以使用%.[n]s来限定输出长度,其中[n]为数字,表示要限定的长度

例:

scanf:

1.基本用法:

1.1.可用键盘给变量输入值

1.2.运行到scznf()函数就会停下,等待输入,并将输入的值存入变量

1.3.需要头文件stdio.h

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

1.5.&为取地址操作符

例:

第一次读了"-25",第二次读了".45512"

2.占位符

2.1.scsnf()和print()用法差不多,scanf( ,& )

2.2.scanf()处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等,因此用户输入多个空格还是换行都不影响

特例:使用%c时,不会忽略空白字符;不过可以在"%"和"c"直接加一个空格,表示忽略字符开头前的空白字符

3.3.赋值忽略符(*)

当使用"%d -%d-%d-"输入年月日"2025-06-28"时,总会有人输入"2025/06/28/",可以使用赋值忽略符来规避报错:

在%c中间加入*,表示这个占位符没有对应的变量,解读后不必返回

3.返回值

3.1.scanf() 的返回值是⼀个整数,表示成功读取的变量个数。

3.2.如果没有读取任何项,或者匹配失败,则返回 0 。

3.3.如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)。 EOF-endoffile ⽂件结束标志。

3.4.按ctrl+z可以提前结束输入

3.5.若不使用返回值需要加:#define _CRT_SECURE_NO_WARNINGS 1

例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值