这篇我们来讲讲c语言中的数据类型和变量,也是我们以后要经常接触到的知识点!
1. 数据类型介绍
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。
使用整型(int)类型来描述整数,使用字符(char)类型来描述字符,使用浮点(float)型类型来描述小数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。下面是我画的一个关于数据类型的框架图:
1.1 字符型
char
//character
[
signed
]
char
//
有符号的
unsigned char
//无
符号的
1.2 整型
//
短整型
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
]
1.3 浮点型
float
double
long double
1.4 布尔类型
C 语⾔原来并没有为布尔值单独设置⼀个类型,而是使用整数
0 表示假
,非零值表示真。
在
C99
中也引入了 布尔类型 ,是专门表示真假的。
布尔类型的使⽤得包含头⽂件
<stdbool.h>
布尔类型变量的取值是:
true或者false
我们看看这些类型的长度:
在上面我们可以看到几个不是很熟悉的比如signed和unsigned,接下来我就讲讲我的理解吧
2.signed和unsigned的区别
C 语言使用
signed
和
unsigned
关键字修饰字符型和整型类型的。
signed
关键字,表示⼀个类型带有正负号,包含负值;
unsigned
关键字,表示该类型不带有正负号,只能表示零和正整数。
对于
int
类型,默认是带有正负号的,也就是说
int
等同于
signed int
。
由于这是默认情况,关键字
signed
⼀般都省略不写,但是写了也不算错。
3.变量
变量在c语言中非常常见,它的格式就是数据类型+变量名;
说起来变量,就不得不提到它的两个分类啦,也是当时学了指针之后很头疼的一个问题对我来说。
3.1 变量的分类
•
全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更⼴,整个工程中想使用,都是有办法使用的。
•
局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。
那全局变量和局部变量的变量名相同呢?
那就是
局部变量优先啦!
3.2全局变量和局部变量在内存中存储在哪里呢?
⼀般我们在学习C/C++语⾔的时候,我们会关注
内存中的三个区域:栈区、堆区、静态区。
1.
局部变量是放在内存的栈区
2.
全局变量是放在内存的静态区
3.
堆区是⽤来动态内存管理的
4. 算术操作符:+、-、*、/、%
在写代码时候,⼀定会涉及到计算。
C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符也称运算符。
分别是:
+ - * / % ,这些操作符都是双目操作符。
4.1
+
和
-
+
和
- 用
来完成加法和减法。
+
和
-
都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双目操作符。
4.2
* 和 /
运算符
*
⽤来完成乘法。
运算符
/
⽤来完成除法。
注意!
除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。除号两端有一个为浮点数则运算结果就是浮点数。
4.3
%
运算符
% 表示
求模(余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。负数求模的规则是结果的正负号由第一个预算数的正负号决定。
5. 单目操作符:++、--、+、-
在我们日常写代码过程中会经常看到这类单目操作符,++是一种自增的操作符,又分为前置++和后置++,--是⼀种自减的操作符,也分为前置--和后置--.有很多编程小白不是很清楚a++和++a的区别,下面我就来给大家用代码讲解一下:
上图就是++a也称前置++,它运行的时候就是先对a进行+1的操作然后再赋值给b所以最后a和b的值都是6,牢记:先+1,后计算
这次就是a++了也称后置++,它运行的时候就是先将a的值赋值给b后进行+1,所以不同上面++a的结果,牢记:先计算,后+1
--a和a--的计算同上。
6. 占位符
scanf()
常用的占位符如下,与
printf()
的占位符基本⼀致。
•
%c
:字符。
•
%d
:整数。
•
%f
:
float
类型浮点数。
•
%lf
:
double
类型浮点数。
•
%Lf
:
long double
类型浮点数。
•
%s
:字符串。
•
%[]
:在方括号中指定⼀组匹配的字符(比如
%[0-9]
),遇到不在集合之中的字符,匹配将会
停⽌。
上面所有占位符之中,
除了 %c 以外
,都会自动忽略起首的空⽩字符。
%c 不忽略空白字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。
如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个或多个空白字符。
下面要特别说⼀下占位符
%s
,它其实不能简单地等同于字符串。它的规则是,
从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。
因为
%s
不会包含空白字符,所以无法用来读取多个单词,除非多个
%s
⼀起使用。这也意味着,
scanf()
不适合读取可能包含空格的字符串,比如书名或歌曲名。另外,
scanf()
遇到
%s
占位
符,会在字符串变量末尾存储⼀个
空字符
\0
。
scanf()
将字符串读入字符数组时,不会检测字符串是否超过了数组长度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s
占位符时,应该指定读入字符串的最长长度,即写成 %[m]s
,其中的
[m]
是⼀个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
下次我们说分支和循环语句!