static在c中的作用
static是C语言中的一个关键字,它用于声明静态变量、静态函数以及限定符。它的作用主要体现在以下几个方面:
1. 静态变量的作用范围仅限于声明它的函数内部,但其生命周期与程序的整个运行周期相同。这意味着当函数执行完毕后,静态变量的值仍然保持不变,下次调用该函数时可以继续使用原来的值。静态变量的特性使得它在函数调用时可以起到记忆的作用,比如可以记录函数调用的次数、保存上次调用的结果等。
2. 静态函数的作用范围也仅限于声明它的源文件内部,不能被其他源文件调用。它的主要作用是将函数的作用域限定在当前源文件中,避免与其他源文件中的函数发生命名冲突。静态函数在编译时会被编译器解析并生成与之对应的符号表,但在链接时不会被放入符号表中。
3. 静态限定符用于限制外部变量或函数的作用范围,使其仅在声明它的源文件内部可见,而在其他源文件中不可见。通过使用静态限定符,可以避免全局变量或全局函数被其他源文件随意修改或调用,提高程序的安全性和可维护性。
静态变量的使用示例:
```c
#include <stdio.h>
void func() {
static int count = 0;
count++;
printf("函数调用次数:%d\n", count);
}
int main() {
for (int i = 0; i < 5; i++) {
func();
}
return 0;
}
```
在上述代码中,我们声明了一个静态变量count,并在每次调用func函数时对count进行自增操作,然后将其打印出来。运行结果如下:
```
函数调用次数:1
static修饰的变量函数调用次数:2
函数调用次数:3
函数调用次数:4
函数调用次数:5
```
可以看到,每次调用func函数时,count的值都会保持下来,这是因为静态变量的生命周期与程序的整个运行周期相同。如果不使用static关键字声明count变量,那么每次调用func函数时都会重新声明和初始化count变量,无法实现计数的功能。
静态函数的使用示例:
```c
// file1.c
#include <stdio.h>
static void staticFunc() {
printf("这是一个静态函数\n");
}
void normalFunc() {
printf("这是一个普通函数\n");
}
```
```c
// file2.c
#include <stdio.h>
void staticFunc(); // 声明静态函数
int main() {
staticFunc();
normalFunc(); // file1.c中的函数,可以直接调用
return 0;
}
```
在上述代码中,我们在file1.c文件中定义了一个静态函数staticFunc和一个普通函数normalFunc。在file2.c文件中,我们通过声明静态函数staticFunc来使其可见,然后在main函数中分别调用了staticFunc和normalFunc函数。编译并运行这两个文件后,得到的输出结果如下:
```
这是一个静态函数
这是一个普通函数
```
可以看到,我们可以直接调用普通函数normalFunc,而对于静态函数staticFunc,我们需要先在调用它的源文件中进行声明。
静态限定符的使用示例:
```c
// file1.c
#include <stdio.h>
static int num = 10;
void printNum() {
printf("num的值为:%d\n", num);
}
// file2.c
#include <stdio.h>
static int num = 20;
void printNum();
int main() {
printNum();
return 0;
}
```
在上述代码中,我们在file1.c文件和file2.c文件中分别定义了一个名为num的静态变量,并在file1.c文件中定义了一个printNum函数用于输出num的值。在file2.c文件中,我们通过声明printNum函数并在main函数中调用它来输出num的值。编译并运行这两个文件后,得到的输出结果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论