继上文:《C语言技术笔记(一)》
一.数据类型
在C语言中,数据类型大体可以分为内置类型和自定义类型,其中,内置类型有字符型,整型,浮点型,还有布尔类型;自定义类型有数组,结构体,枚举,还有联合体,大家可以看看下图,更好理解,舒服:
下面我们先对内置类型进行简单了解:
(1)字符型
1.char
2.[signed] char
3.unsigned char
(2)整型
通俗易懂,也叫整数。
1.“int">>这个便是我们熟知的整形,当然,整形还分为长长整型,长整型与短整型:
短整型:
1.short [int]
2.[signed] short [int]
3.unsigned short [int]
长整型 :
1.long [int]
2.[signed] long [int]
3.ungned long [int]
长长整型:
1.long long [int]
2.[signed] long long [int]
3.unsigned long long [int]
(3)浮点型
通俗易懂,也叫有小数部分。
1.float
2.double
3.long double
在这里float是单精度浮点型, double是双精度浮点型,所以说double的精度会更高long double的精度当然就会比double更高。
(4)布尔类型
布尔类型在C语言中比较特殊,起初布尔类型不存在于C语言。而是单纯的用零表示假,非零表示真。但是在后来的C99中引入了布尔类型。所以说比较特殊。因此,使用布尔类型要运用到头文件------<stdbool.h>
1.''_Bool'' ##在里也可以是''bool''
布尔类型变量的取值是:true或者false.
当然,每个数据类型它都有自己的长度,使用不同的数据类型创建出来的变量长度也有所不同,为了能够知道它的长度。下面我们介绍一种新的操作符------sizeof,用于测量数据类型的长度 。
(5)补充:sizeof操作符
sizeof
是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。
sizeof
操作符的操作数可以是类型,也可是变量或者表达式。
不过,在计算数据类型和表达式时,两者表述方式不同:
1.sizeof( 类型 )
2.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 。
反正简单来说,''sizeof''的返回值是''size_t''
那么现在,我就用VS2022给大家演示一下不同数据类型的长度:
还有,需要注意的是:sizeof中表达式不计算,切记切记!切记切记!切记切记!
我还是用VS2022来给大家演示:
看吧,a还是2.
二.signed和unsigned
C 语⾔使⽤
signed
和
unsigned
关键字修饰字符型和整型类型的。
1.signed
关键字,表⽰⼀个类型带有正负号,包含负值。
2.unsigned
关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
3.对于
int
类型,默认是带有正负号的,也就是说
int
等同于
signed int
。
4.由于这是默认情况,关键字
signed
⼀般都省略。
signed都有正负了,为什么还要另一个,那当然是另有作用(好处):
整数变量声明为
unsigned
的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。⽐如,16位的signed short int
的取值范围是:-32768~32767,最⼤是32767;⽽unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65535。
三.变量
既然有了类型,那咱们就应该用类型来创建变量。
(1)创建变量的基本格式
数据类型+空格+变量名;eg:"int year"---整型变量----与int有关:依此:char year---字符变量。
这里,int是数据类型。空格后面的year就是变量名。变量名可以自己输入,不过变量名尽量要起得有意义,而且不能与关键字冲突。
(2)变量也有分类
变量分为全局变量和局部变量,字面上讲,全局大于局部,也就是说全局有优先权,但是在C语言里,有些情况会特殊点。
1.全局变量:在⼤括号外部定义的变量就是全局变量,全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
2.局部变量:在⼤括号内部定义的变量就是局部变量,局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
如果局部和全局变量,名字相同呢?
其实当局部变量和全局变量同名的时候,局部变量优先使⽤。但是最好不要同名 。
补充:
内存中的三个区域:栈区、堆区、静态区。
1.
局部变量是放在内存的栈区
2.
全局变量是放在内存的静态区
3.
堆区是⽤来动态内存管理的