文章目录
1.转义字符
转义字符:顾名思义就是转变意思的字符
-
\? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,但在新的编译器上没法验证了。
三字母词 对应的字符 ??= # ??( [ ??) ] ??< { ??> } ??! / ??! | ??’ ^ ??- ~ -
\ ’ :⽤于表示字符常量 '。
-
\ ":⽤于表示⼀个字符串内部的双引号 。
-
\ \ :⽤于表示⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
-
\a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
-
\b :退格键,光标回退⼀个字符,但不删除字符。
-
\f :换页符,光标移到下⼀页。在现代系统上,这已经反映不出来了,行为改成类似于 \v 。
-
\t :水平制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。
扫描二维码关注公众号,回复: 17211085 查看本文章 -
\v :垂直制表符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
-
\n :换行符。
-
\r :回车符,光标移到同⼀行的开头。
-
\ddd d d d表示1-3个八进制数。如: \130表示字符x。
-
\xdd… 表示两个十六进制数,其中d可以多于两个,但是多了没用,因为最大的ASCLL值就是127即7f。
2.数据类型介绍
C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
2.1内置数据类型
短整型
- short [int]
- [signed] short [int]
- unsigned short [int]
整型
- int
- [signed] int
- unsigned int
⻓整型
- long [int]
- [signed] long [int]
- unsigned long [int]
更长的整型,C99中引入
- long long [int]
- [signed] long long [int]
- unsigned long long [int]
浮点型
- float
- double
- long double
布尔类型,C99中引入
- Bool ---- (true/false)
- C语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。
2.2sizeof操作符
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。
sizeof操作符的操作数可以是类型,也可是变量或者表达式。
如下:
sizeof( 类型 )
sizeof 表达式
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
sizeof 的计算结果是 size_t 类型的。( sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给系统⾃⼰去决定, sizeof 到底返回什么类型。)
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返回值类型。
2.2.1sizeof中表达式不计算
int main()
{
int a = 10;
char c = 0;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);//可以省略()
printf("%d\n", sizeof(a + 10));//
printf("%d\n", sizeof(c = a + 10));
//sizeof中的表达式是不计算的,当a放c里面时会发生截断,最终结果由C决定
return 0;
}
3.signed和unsigned
C 语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。
- signed 关键字,表⽰⼀个类型带有正负号,包含负值;
- unsigned 关键字,表⽰该类型不带有正负号,只能表示零和正整数。
整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。
- signed short int ( -32768~32767)
- unsigned short int (0~65535)
字符类型
- signed char (-128~127)
- unsigned char (0~255)
C语言中规定:int等于signed int,但char有可能是有符号的,也可能是无符号的(取决于编译器)
4.变量
C语言规定那么多的数据类型干什么呢?----->创建变量
- 全局变量:在大括号外部定义的变量就是全局变量。(全局变量的使用范围更广,整个工程中想使用,都是有办法使用的)
- 局部变量:在大括号内部定义的变量就是局部变量。(局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用)
- 当局部变量和全局变量同名时,遵循局部变量优先的原则
int a = 100;
int main()
{
int a = 10;
printf("%d", a);//10
return 0;
}
程序运行起来使用是要在内存中申请空间的,那局部变量和全局变量放在哪里呢?
- 局部变量是放在内存的栈区
- 全局变量是放在内存的静态区
- 堆区是⽤来动态内存管理的
5.操作符
5.1算术操作符
- 加法:+
- 减法:-
- 乘法:*
- 除法:/
除号两端如果是整数,则执行的是整数除法,得到的结果也是整数。
如果想得到浮点数的结果,则需要操作符两端至少有一个是浮点数
int main()
{
float a1 = 6 / 4; //1.000000
int b1 = 6 / 4; //1
float a2 = 6.0 / 4;//1.500000
int b2 = 6.0 / 4; //1
printf("%f\n", a1);
printf("%d\n", b1);
printf("%f\n", a2);
printf("%d\n", b2);
return 0;
}
- 取余:%
- 运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数
- 负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
5.2赋值操作符
- 在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
int a = 10;//初始化
a = 20;//赋值
- 连续赋值
int a = 2;
int b = 3;
int c = 4;
c = b = a+3;//不建议这样写
- 复合赋值
int a = 5;
a + = 3;// <==> a = a + 3
C语言中还有以下复合赋值操作符
+= -=
*= /= %=
>>= <<=
&= |= ^=
5.3单目操作符
C语⾔中还有⼀些操作符只有⼀个操作数,被称单目操作符。
1. 后置++、后置--(先使用,后加减) //a++,a--
2. 前置++、前置--(先加减、再使用) //++a,--a
3. 正负号
5.4强制类型转换
当我们遇到两边类型不一致的数据是,会用到强制类型转换。
强制类型转换只取整数部分,如下:
int a = 3.14;
//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
//为了消除这个警告,我们可以使用强制类型转换
int a = (int)3.14;
//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
俗话说,强扭的瓜不甜,我们使用强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样自然更好。