目录
第一部分、关于变量
1、什么是变量?变量的分类?
2、变量的作用域?变量的生命周期?
第二部分、关于常量
1、什么是常量?
2、如何定义常量?
第三部分、关于字符串
1、什么是字符串?
2、如何定义字符串数组?
3、字符串的结束标志?
3.1、如何验证编译器是通过寻找\0来判断一个字符串是否结束的?
3.2、如何验证结束标志\0是不算在字符串长度中的?
3.3、如何验证结束标志\0是不算在字符串内容中的?
第四部分、关于转义字符
1、什么时候需要转义?
2、常见的转义字符
3、练习一下
变量:可以改变的量就叫变量,例如体重、年龄等。
变量的分类:可分为全局变量和局部变量,全局变量:定义在main{}外面的变量;局部变量:定义在main{里面的变量}。
作用域:某个变量它能够发挥作用的范围,超过这个范围就无法使用。例如:跨文件的变量,必须要利用extern来实现。
生命周期:变量创建和销毁的时间段。
常量:不可以改变的量,例如圆周率,性别等。
- const int a = 10; const修饰的常变量(易混淆static)
- enum 名称 { a,b,c}; 枚举常量
- #define max 10; #define定义的常量
示例如下:
#define max 100;
enum SEX
{
aa,//从0开始算
bb = 2,
cc
};
int main()
{
//const 修饰的常变量
const int a = 10;//此时a值无法改变,但是a只能称作常变量,还是属于变量范畴,让a做a[a],是错误的
printf("%d\n", a);
//宏定义的常量
int max1 = max;
printf("%d\n", max1);
//枚举常量
enum SEX val1 = aa;
printf("%d\n", val1);
return 0;
}
由双引号引起来的一串字符称为字符串。
注意:单引号引起来的是一个字符,双引号引起来的是字符串,所以单个字母用单引号,字符串用双引号。
//下面这两句话是等效的,%c打印一个字符,和单引号‘’相对应
//%s打印一个字符,和双引号“”相对应
printf("%s\n","a");
printf("%c\n",'a');
- 方式一:char val[] = "aaasdadasfd";
- 方式二:char val[] = {'a','a','a','d','a','s','f','d','\0'};
注意:有大括号用单引符,无大括号用双引号。
例如错误的表达方式:char val[] = {"aaasdadasfd"};这是一种错误的定义方式,没有这种定义方式。
首先在编译器中,字符串一定是要有结束标志的符号,也就是\0,因为在内存中,去寻找字符串或者计算字符串长度时都必须要找到结束标志,不然无法确定内存中的多少到多少是一个字符串。
注意:字符串的结束标志是一个 \0 的转义字符,编译器去判断一个字符串是否结束,就是看结尾是否有\0,但是\0不算做字符串的内容,也不算在字符串长度里面(strlen计算不算,但是sizeof算,如下截图)。
例如:在C语言编译器中,我们都知道\n是用来换行的,如下:
printf("\n");//换行
现在我不想让它换行,我就想单纯打印\n这两个字符。那该如何打印呢?
这个就需要通过斜杠\来进行转义,将\n换行的含义进行转换,转换为2个字符。如下:
通过上面的例子分析可知,当某两个字符或几个字符组合在一起时,C编译器会默认它有某种功能,从而就不会去打印这几个字符,而是去实现他们组合的功能。
换句话说就是,就是当编译器无法识别当前我想打印的内容时,这个时候就需要用到斜杠\去转义,实现我们想打印的内容。
转义字符 | 含义 |
\' |
用于表示字符常量' |
\" |
用于表示一个字符串内部的双引号" |
\\ |
用于表示一个反斜杠\ |
\n |
换行 |
\r |
回车 |
\t |
水平制表符(行输出Tab) |
\v |
垂直制表符(列输出Tab) |
\ddd |
ddd表示1~3个八进制的数字,对应ASCII码表 |
\xdd |
dd表示2个十六进制数字,对应ASCII码表 |
\a |
警告字符,蜂鸣 |
\b |
退格符 |
\f |
进纸符 |
数一下面字符串的长度:
char arr[] = "c:\test\628\test.c";
结果应该是:14个。
这里需要理解的就是\628与上表格中的特殊转义字符\ddd,很类似,但是需要注意的是八进制数据,8已经超过8进制了,因此8单独算一个字符。\62算一个特殊字符。