前言
本篇文章介绍C语言的变量和常量。
一、变量
1.1 变量的概念
局部变量:{}内部定义的变量
全局变量:{}外部定义的变量
注意:当全局变量和局部变量的命名相同时,局部变量使用优先。
1.2 变量的作用域和生命周期
1.2.1 变量的作用域
变量的作用域:变量的有效使用范围。
局部变量的作用域:变量的所在的局部范围(定义变量的{}内有效)。
全局变量的作用域:整个工程。
1.2.2 变量的生命周期
变量的生命周期:变量的创建-使用-销毁的整个过程。
局部变量的生命周期:进入作用域,生命周期开始;离开作用域,生命周期结束。
全局变量的生命周期:整个程序的生命周期。
二、常量
2.1 常量的分类
- 字面常量
字符常量,例如: ‘a’
字符串常量,例如, “abc”
数字值:例如,3.14 和5 - const修饰的常变量
const修饰的变常量本质是变量,不能直接被修改,有常量的属性。
关于const关键字的说明如下:
2.1 const修饰普通变量时,不能直接通过变量名修改变量的值;但可以通过间接修改,比如通过指针修改。
int main()
{
const int a = 10;
//a = 20; 这种方式不允许,直接报错
int* pa = &a;
*pa = 20; //通过指针间接修改a的值
printf("%d", a);
return 0;
}
2.2 const修饰指针变量时,分两种情况:
- 当const位于*的左边时,指针变量pa指向的对象不能直接通过pa来改变,但指针变量pa本身的值可以改变
int main()
{
int a = 10;
int b = 20;
const int* pa = &a;
printf("*pa = %d",*pa);
//*pa = 20; //不允许修改,直接报错
pa = &b; //可以修改指针变量pa的指向
printf("*pa = %d", *pa);
return 0;
}
当然,如果实在是想要修改被const修饰的指针pa指向的对象的值,需要利用二级指针间接修改。
//二级指针修改被const修饰的一级指针
int main()
{
int a = 10;
const int* pa = &a;
printf("未修改前 a = %d\n", a);
int** ppa = &pa;
**ppa = 20; // *ppa == &a, **ppa = 20
printf("通过二级指针修改后 a = %d\n", a);
return 0;
}
- 当const位于*的右边时,指针变量p指向的对象可以通过p改变,但指针变量p本身的值不可以直接改变。
int main()
{
int a = 10;
int b = 20;
int* const pa = &a;
// pa = &b; //不可以修改pa本身的值
*pa = 20; //可以修改pa指向的对象的值
printf("%d", a);
return 0;
}
如果想要修改pa的指向,可以通过二级指针间接修改
int main()
{
int a = 10;
int b = 20;
int* const pa = &a;
printf("*pa = %d\n", *pa);
int** ppa = &pa;
*ppa = &b; //相当于 pa = &b
printf("*pa = %d\n", *pa);
return 0;
}
- define定义的标识符常量
- 枚举常量
三、转义字符
转义字符是指使用\与其他字符组成一个字符,表示另一种意思。
转义字符 | 释义 |
---|---|
\n | 换行 |
\t | 水平制表符 |
\v | 垂直制表符 |
\b | 退格符 |
\a | 蜂鸣 |
\r | 回车 |
\f | 进纸符 |
\’ | 单引号 |
\" | 双引号 |
\ \ | 字符’\’ |
\0 | 字符串结束符 |
\ddd | 八进制形式 |
\xddd | 十六进制形式,例如,‘a’的十六进制ASCII码是61,于是’a’也可表示为’‘\x61’ |