一、变量的作用域和生命周期
作用域:一个变量在哪里可以使用它,哪里就是它的作用域。
局部变量的作用域:变量所在的局部范围
全局变量的作用域:整个工程
不管整个工程里面有多少源文件,都可以使用全局变量。这样的弊端是不安全。
比如:
在add.c文件中定义全局变量,int g_val=2022
在test.c文件中想要使用add.c文件中定义的全局变量
extern int g_val; //需要声明外部符号
int main(){
printf(“%d\n”,g_val);
return 0;
}
生命周期:
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期:整个程序的生命周期
二、常量
分类
(1)字面常量
100 整形字面值
‘w’ 字符字面值
3.14 浮点型字面值
“abcd” 字符串常量
(2)const修饰的常变量
const int num=9;
这里的num是const修饰的常变量。const修饰的常变量在C语言中只是在语法层面上限制了变量num不能被修改,但是num本质上还是一个变量,所以叫常变量。
const int n=10;
int arr[n]=0;
以上这样的写法是不对的,因为n虽然被const修饰,具有了常属性,不能被修改,但本质上还是变量,所以不能用来指定数组的大小。
int n=9;
int arr[n];
以上代码是在支持C99编译器上可编译的。C99中,引入了变长数组的概念,变长数组的大小是可以使用变量来指定的,但是数据不能初始化。在VS2019中是不支持C99的变长数组的,所以没法验证。
在Linux中的gcc编译器是支持变长数组的。
(3)#define定义的标识符常量
#define定义的标识符常量,可以写在{}中,不能被修改,可以用来自指定数组的大小。
#define Max 100
printf(“%d\n”,MAX);
(4)枚举常量
枚举 enum
性别:男、女、秘密
三原色:RED GREEN BLUE
enum Sex{
male,
female,
secret
};
enum Sex是声明的一个表示性别的枚举类型
下面三个符号是这个枚举类型的未来的可能取值
enum Sex s=female;
用这个枚举类型创建的变量s,用枚举类型的可能取值进行赋值
priintf(“%d\n”,female);
注意:枚举常量的默认是从0开始,依次向下递增1的
如果想要指定枚举常量的某个值,可以自己在枚举类型的可能取值中进行赋值
enum Sex{
female=11,
male,
secret
};
三、字符串
"hello bit.\n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符
串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串
内容。
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
char arr1[] = "bit";
char arr2[] = {
'b', 'i', 't'};
char arr3[] = {
'b', 'i', 't', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
strlen是一个库函数,专门求字符串长度,头文件是string.h
strlen从起始位置开始数,统计\0字符前出现的字符个数
四、转义字符
转义字符顾名思义就是转变意思
转义字符 <