C语言中的三个重要关键字的作用
C语言中static关键字的作用
作用:
-
修饰局部变量:(改变局部变量的生命周期)
普通局部变量(即未加static修饰)在未进行赋值和申请地址时,系统都会默认给定一个垃圾值和随机地址,在其所在程序执行完后,系统会释放其地址;而被static进行修饰的局部变量,在程序执行结束后,依旧保存在相对应的地址,当本段程序再次被调用时,依旧存有上次运行后的结果。
#include <stdio.h>
void p()
{
int i = 1;
printf("i = %d\n", i);
i++;
printf("i++ = %d\n", i);
}
void static_p()
{
int static_i = 1;
printf("i = %d\n", static_i);
i++;
printf("i++ = %d\n", static_i);
}
int main()
{
p();
printf("\n");
static_p();
printf("二次运行后:\n");
p();
printf("\n");
static_p();
return 0;
}
程序运行结果:
i = 1;
i++ = 2;
i = 1;
i++ = 2;
二次运行后:
i = 1;
i++ = 2;
i = 2;
i++ = 3;
含有静态常量的函数多次执行时,其静态常量的地址不变,故值会影响下次运算结果。
-
修饰全局变量
普通全局变量定义后,可在整个工程文件中进行调用,即在同一个工程中的其他文件中定义相同变量时,系统会默认成同一个全局变量;在加入static修饰后,静态全局变量仅适用于当前文件,当在其他文件中进行相同名称的变量定义时,系统会定义成不同变量,可定义为不同类型和地址的变量。
-
修饰函数时
修饰函数时,原理同全局变量,即未被static修饰的函数,可以在同一个工程的其他文件中进行调用;而被修饰的静态函数,仅适用于当前文件,在其他文件中可重新进行定义和调用。
C语言中extern关键字的作用
extern: 指所引用的变量或函数来源于其他文件,即引用于其他文件,主要起声明作用
变量
变量未加extern时,变量出现可能是定义也可能是声明,当加入extern进行修饰时,修饰的变量只能是声明作用,即extern变量不能进行赋值,已在其他文件中定义。
#extern int num; //声明num这个变量,表示已在其他文件中定义
#extern int num = 10; //extern定义变量需要分配内存,故使用错误
函数
应用在函数之前,表示此函数并非本文件所定义的函数,默认为外部函数,用于区分工程中的不同文件中类似函数的定义或声明,能够标准化程序的书写,区分工程中的不同函数。
C语言中const关键字的作用
const:
const作为C语言中的一个关键字,主要起保护和防止意外的作用,可以用来修饰变量、函数、返回值等,可以提高被修饰物的稳定性,即保护他们不被意外修改。
1.函数
const修饰函数时,被修饰函数内部所有不进行参数修改的函数有应该声明为const函数,如果被修饰函数改变了内部参数或者通过外部函数进行了内部参数的修改,则编译时系统会进行报错。
2.返回值
函数返回const指针类型,则const指针受保护,不会受到改变,只能返回给同类型的const指针变量;
函数返回值如果为值传递,则无须加const修饰,函数会把返回值返回给外面变量,即const无意义。
3.变量
const char *p: 即被修饰的p指针指向的内容受保护,无法改变;
char *const p:即被修饰的p内容可变,但是指针p本身的地址无法被改变;
还可以将两种修饰方法进行结合,即保护其内容和本身地址都无法受到改变。