前言
嘿嘿,这里来到了初识C语言的第二部分,今天我们会初步认识变量的作用域和生命周期,常量,字符串和字符,转义字符
一、变量的作用域和生命周期
变量分为全局变量和局部变量。
全局变量:定义在main函数外部的全局范围。
局部变量:定义在函数内部的局部范围。
作用域:变量起作用的范围。
#include<stdio.h>
int a = 30;//这个是全局变量
int main()
{
int a=10;//这个是局部变量
printf("%d\n", a);
{
int b=5;//这个也是局部变量
printf("%d\n", b);
}
/*printf("%d ", b);*///当我们把这句话取消注释之后,我们会发现出了b所在的括号范围程序报错.
return 0;
}
程序结果:
10
5
结论:
- 当全局变量与局部变量同名时优先局部变量
- 局部变量作用域就是所在的局部范围,全局变量的作用域是整个工程,不够安全,当跨源文件使用时要用extren这个关键字进行声明
- 局部变量的生命周期是从进入作用域开始,出作用域结束,全局变量生命周期是整个程序的生命周期
二、常量
- 字面常量:字面不会改变的值(例如:100,'a’等)
- const修饰的常变量:(例如const int a),这意味着这个变量从语法层面被锁住了,不能再改变了,但是被修饰的(a)还是变量,不能做常量做的事(比如定义数组大小之类的)
- #define定义的标识符常量:(例如 #define Max 1000)之后程序看到Max就会自动替换成1000,可以增加程序可读性(一般#define后面不加分号,可能会出bug)
- 枚举常量:我们生活中有些东西取值范围是固定的,比如三原色(RGB)这就会用到枚举类型(写法如下),枚举常量就是枚举类型中的可能取值(Red,Green,Blue),它们是有值的,默认从0开始依次加一(Red=0,Green=1,Blue=2),也可以通过对第一个枚举常量初始化来改变顺延值(例如 Red=5,那么值就会变成 Red=5,Green=6,Blue=7)
enum color
{
Red,Green,Blue
};
```c
enum color
{
Red=5,Green,Blue//此后Green=6,Blue=7)
};
三,字符和字符串
字符是用放在单引号,字符串是放在双引号里面的
例如:‘A’是字符,“ABC"是字符串。
字符串的结束标识是转义字符’\0’
字符串 “ABC”=‘A’,‘B’,‘C’,‘\0’
#include<stdio.h>
extern int c;
int main()
{
char a1[] = { 'a','b','c' };
char a2[] = "abc";
return 0;
}
计算字符串长度时也是只算’\0’之前的字符长度,如果是像a1这样没有’\0’的字符数组,计算机则会向后遍历知道遇到’\0’字符才停止。
#include<stdio.h>
#include<string.h>
extern int c;
int main()
{
char a1[] = { 'a','b','c' };
char a2[] = "abc";
printf("%d\n", strlen(a1));
printf("%d", strlen(a2));
return 0;
}
可以敲一下仔细观察一下结果的不同哟!
转义字符
转义字符:就是加了个’‘转变意思的符号(例如:’0‘是字符0,’\0‘就变成字符串结束标志啦)
转义字符有很多,我们简单认识几个
\"表示双引号里面的双引号,例如我们想打印’’ 11’2’‘5 ‘‘这类秒表计时数据,但是2后面的’‘会和前面开头的’‘配对,这就需要改为’’ 11’2/’‘5 ‘’,表示这个引号就是单纯的引号,不参与配对。
\'原理与之相似
\\表示一个斜杠,一般用于打印路径,例如’’ d:\abc\nDEF ",我们不想\与n组成换行符\n,就会再加一个
比较重要的两个转义字符
\ddd:ddd表示1~3位的八进制数字,这个转义字符表示由ddd表示的八进制数字转化为十进制时对应的ASCII码值所对应的字符。
例如:‘\130’ 130代表的八进制数转化为十进制对应88,88的ASCII码对应X,所以这个字符表示’X’
\dd:同上,只不过dd代表1~2位的十六进制数字
总结
这里对文章进行总结:
以上就是今天要讲的内容,本文简单介绍了一些作用域生命周期,以及一些关于常量,字符与字符串还有关于转义字符的一些小知识点,希望大家能够掌握哟