一、关键字static、const、extern作用
1、const
修饰常量:用const修饰的变量是不可变的
修饰常量:
如果const位于*的左侧,eg:const int* a,则const就是用来修饰指针所指向的变量,此时为常量指针,即指针指向*a为常量;
如果const位于*的右侧,eg:int* const a,const就是修饰指针本身,此时为指针常量,即指针本身a是常量。
const int* p = &a; // 常量指针;指针指向的内容不能变,*p不能变
int* const p = &a; // 指针常量;指针本身不能变, p不能变
修饰函数参数:用const修饰函数参数,传递过来的参数在函数内不可以改变。
void func (const int &n)
{
n = 10; // 编译错误
}
2、static
代码运行,分析:
1、子函数中不加static进行修饰
#include <stdio.h>
void test()
{
static int a = 0;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for (i = 0; i < 8; i++)
{
test();
}
return 0;
}
2、子函数中加static进行修饰
#include <stdio.h>
void test()
{
static int a = 0;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for (i = 0; i < 8; i++)
{
test();
}
return 0;
}
结果分析:
1、当static 在函数中被使用的时候,修饰变量,考虑能否变量的值每次被调用的时候保存
不加static修饰,为自动变量,存储于堆栈中。函数或代码块内部中的变量在函数或者代码块执行完毕后就自行销毁了,每次执行都会重新分配内存,每次执行完都会销毁。
加 static 修饰,为静态变量,存储于静态内存中,在整个程序执行过程中一直存在。static的局部变量,并不会随着函数的执行结束而被销毁,当它所在的函数被再次执行时,该静态局部变量会保留上次执行结束时的值,直到程序结束 static 变量才会被回收。
2、当static 在文件中被使用的时候,要考虑,是否在多个源文件中这个变量能够被使用