首页 > 其他分享 >static关键字在C语言中的主要应用

static关键字在C语言中的主要应用

时间:2024-12-19 22:26:56浏览次数:11  
标签:count 文件 file1 C语言 关键字 static 修饰 全局变量

在C语言中, static 关键字有以下几种主要应用:


1.修饰局部变量


当 static关键字修饰一个局部变量时,这个变量就成为静态局部变量,通常一般局部变量存储在栈区,在函数执行结束后变量就会被销毁了。但被 static 修饰的局部变量存储在静态存储区,在函数调用结束时在程序的整个生命周期内都存在。
例如:

在这个例子中, count 是 func 函数内的静态局部变量。第一次调用 func 时, count 初始化为0,然后自增为1并打印。第二次调用 func 时, count 不会重新初始化,而是保留上次调用结束时的值1,然后自增为2并打印。

​
​
#include <stdio.h>
void func() {
    static int count = 0;  // static修饰局部变量count
    count++;
    printf("count的值为:%d\n", count);
}
int main() {
    func();
    func();
    return 0;
}

​

​

2.修饰全局变量
 
用于限制全局变量的作用域。在一个C文件中定义的全局变量默认是可以被其他文件中的函数访问。例如,在一个多文件的c中,如果有一个文件定义了普通全局变量,那么在另一个文件中可以通过extern关键字来使用。但如果用 static 修饰全局变量,这个变量就只能在定义它的文件内部访问,其他文件无法访问。
例如,有 file1.c 和 file2.c 两个文件:
file1.c 内容如下:

static int global_variable = 10;  // 用static修饰全局变量
void print_variable() {
    printf("file1中的global_variable的值为:%d\n", global_variable);
}

 file2.c 内容如下:

// 在这里无法访问file1.c中的global_variable变量
int main() {
    // 下面这行代码如果取消注释会导致编译错误,因为无法访问另一个文件中被static修饰的全局变量
    // printf("尝试访问file1中的global_variable的值为:%d\n", global_variable);
    return 0;
}

3.修饰函数
 
作用和修饰全局变量类似,是用于限制函数的作用域。被 static 修饰的函数是静态函数,只能在定义它的文件内部被调用,其他文件无法调用。
例如,还是有 file1.c 和 file2.c 两个文件:
 file1.c 内容如下


#include <stdio.h>
// 定义一个静态函数,该函数只能在本文件中被调用
static void staticFunction() {
    printf("This is a static function in file1.c\n");
}
void callStaticFunction() {
    staticFunction();
}

​

 file2.c 内容如下:


// 尝试在另一个文件中调用file1.c中的静态函数会出错
// 因为其作用域仅限于file1.c
// 正确的做法是调用file1.c中的callStaticFunction函数来间接调用staticFunction
extern void callStaticFunction();
int main() {
    callStaticFunction();
    return 0;
}

标签:count,文件,file1,C语言,关键字,static,修饰,全局变量
From: https://blog.csdn.net/2401_88607462/article/details/144571139

相关文章

  • 深入理解C语言和C++中struct的区别
    大家好!我是兔飞飞!今天学习struct结构体,主要从c语言和c++的对比出发,这样更好辨析,应该大部分人都是先学c语言,再学的c++?1.C中struct的特点在C中,struct主要是用来定义一个包含多个数据成员的数据结构。结构体在C中只能包含数据成员,而不能包含函数。以下是C中struct......
  • C语言-稀疏数组转置
    1.题目要求 2.代码实现 #include<stdio.h>#defineMAX_TERM80//定义稀疏矩阵结构体typedefstructjuzhen{introw;intcol;intvalue;}Juzhen;//显示稀疏矩阵voidshow(Juzhena[],intcount_a){printf("irowcolval\n");f......
  • c语言循环与图形打印
    排列组合:字符类型一致、有变化空心实心前空格有无 形成基本图形:矩形三角形平行四边形菱形沙漏圆形 1.数字镂空金字塔流程图:  函数部分:voidhollowPyramid(intn){for(inti=1;i<=n;i++){//打印前导空格for(intj=1;j<=......
  • C语言学习笔记
    目录一、为什么要学C1.1C的优点1.2C的缺点二、计算机基础2.1字节2.2进制三、C的数据类型3.1数据的储存3.2补码、原码和反码3.2.1原码和反码3.2.2补码3.3变量四、运算符和表达式4.1运算符4.2运算符优先级一、为什么要学C作为诞生于1972年的编程语言,已......
  • python当中的with关键字
    python当中的with关键字Python中with关键字的作用with关键字在Python中用于上下文管理。它简化了资源的获取和释放,特别是文件操作、数据库连接或网络套接字等资源。使用with语句时,可以确保在执行代码块时,资源会得到适当的管理和清理,即使在出现异常的情况下,也能保证资......
  • C语言 查漏补缺(数组+结构体+指针)
    1.基础概念1.1数组名的命名规则和变量名相同,遵循标识符命名规则。1.2在C语言中,数组名被当作常量,其值是数组的首地址。1.3变量的地址是指变量在内存中占据起始存储单元的编号1.4定义结构体的关键字是struct,定义共用体的关键字是union。2.函数2.1gets(  )#include......
  • C语言 查漏补缺(顺序篇)
    1.语句在C语言中,一个语句可以写在多行,但并不是可以在任意处断开。例如,不能在一个关键字中间、变量名中间或者一个字符串常量中间随意断开。2.printf溢出(个例)  答案:-1注:负数在内存中一般以补码的形式储存3.printf 的宽度处理机制eg:printf("%8.3f",x); 这......
  • 【C语言练习(13)—打印100以内素数】
    C语言练习(13)文章目录C语言练习(13)问题问题分析结果问题找出100以内的素数,并打印出来问题分析质数(英文名:Primenumber)又称素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。比如5如何判断是不是素数,为了找5的因数,我们可以从2~4逐个找是不是因子,......
  • 【C语言练习(12)—反向输出字符串】
    C语言练习(12)文章目录C语言练习(12)前言题目题目解析结果总结前言对于一个给定的字符串,反方向输出该字符串,本次给了循环和利用指针反向输出两种方法题目给定一个字符串,计算该字符串的个数并反向输出例如给定字符串ILoveStudy则反向输出后为ydutSevoLI题目解析......
  • 初识C语言——C语言的常见概念(下)
    初识C语言——C语言的常见概念(下)在上一章,我们认识了C语言的概念、历史、使用方法。在对C语言有了初步的了解之后,我们可以来写下我们的第一个C语言程序啦!......