1)关键字-static
- 修饰局部变量:改变其生命周期,本质是改变存储类型
test()
函数是自定义的一个函数,在这个函数中定义了两个变量a
和b
,a
是一个局部变量,在每次调用test()
函数时,变量a
都会重新初始化为1,然后再进行自增操作,因此每次输出的a
的值都是2。而变量b
在第一次调用test()
函数时被初始化为1,之后在每次调用test()
函数时都会进行自增操作,因此每次输出的b
的值都会递增。由于a
是一个局部变量,每次函数调用都会重新初始化,所以在函数调用间不会保留之前的值,而b
是一个静态变量,其值在函数调用间是持久的,因此在下一次函数调用时,b
的值会继续递增。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void test()
{
int a = 1;
static int b = 1;
a++;
printf("%d", a);
printf(",");
b++;
printf("%d\n", b);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
(2)全局变量
① static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部使用,其他源文件无法使用;
②全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int g_val = 20230816; //全局变量
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
extern int g_val; //extern 声明外部符号
int main()
{
printf("%d\n",g_val);
return 0;
}
2)define定义常量和宏
(1)定义一个常量
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define max 1000
int main()
{
printf("%d",max);
return 0;
}
(2)定义一个宏add(x, y)
,实现了将两个数相加的功能.
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define add(x,y) x+y
int main()
{
printf("%d\n",add(3,4));
printf("%d\n",3*add(3,4)); //printf("%d\n",3*(add(3,4)))或定义是加();
return 0;
}