一、必须理解的几个概念
1.变量的作用域和生命周期
(1)作用域:
作用域(scope)概念:一段程序代码中所用到的名字并不是总是有效的,限定这个名字的可用性的代码范围就是这个名字的作用域。 |
①局部变量的作用域是变量所在的局部范围。 ②全局变量的作用域是整个工程 ③局部变量与全局变量重名时,局部变量优先 举个例子:
#include<stdio.h>
int a = 10;
int Add(int z, int b)
{
int a = 100;
return a + b;
}
int main()
{
int a = 3;
int b = 4;
printf("%d", Add(a, b));
}
代码结果如下: 可以看到尽管变量a有三次重复,优先选取局部,即在Add函数里面定义的变量a。 再举个例子:
#include<stdio.h>
int a = 10;
void test()
{
int a = 3;
a++;
}
int main()
{
test();
printf("%d", a);
}
在test函数里面优先使用局部变量a,出了test函数变量销毁,因此在main函数里头a还是全局变量的a,即a=10。
(2)生命周期
生命周期的概念:变量的生命周期指的是变量从创建到销毁的一个时间段。 |
①局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。 ②全局变量的生命周期:整个程序的生命周期。
二、转义字符
(1)
转义字符(Escape Character)是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符、被当作特殊用途而需要转换回它原来的意义的字符。 |
ASCII编码中的转义字符对应意义如下: 比如下面这道笔试题: 请回答该段代码输出什么: 输出结果如下: 其中的\t,\62为转义字符,在字符串中只占据一个字节。
三、常见的关键字
(1)关键字 typedef
typedef 顾名思义,是用来重命名类型。 例子如下: |
(2)关键字static
static用来修饰变量和函数: ①修饰局部变量-称为静态局部变量 ②修饰全局变量-成为静态全局变量 ③修饰函数-成为静态函数 |
①修饰局部变量
例子:分析下面两段代码 代码一:
#include <stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
运行结果如下: 可以看到由于test函数中的变量i出了函数作用域生命周期结束,自动销毁。 第二段代码:
#include <stdio.h>
void test()
{
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i=0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
运行结果如下: 可以看出static改变了test函数中的i变量的生命周期,i即使出了函数作用域依旧存在,直到程序结束。(static将栈区的变量i放到了静态区中)
②static修饰全局变量
修饰前: (其中使用外部源文件的全局变量需用extern声明) 用static修饰后: 即全局变量用static修饰后,变量只能在本源文件内使用,不能在其他源文件内使用。
③修饰函数:
修饰前: (使用外部源文件的函数不需要用extern声明) 修饰后: 可以看到static修饰函数与修饰全局变量的效果如出一辙,事函数只能在本源文件内使用,不能在其他源文件内使用。
|