当前位置:   article > 正文

C语言学习之static_c语言封装静态变量

c语言封装静态变量

目录

1.了解static

2.static的作用

3.static修饰局部变量

        1.例子

        2.分析

        3.结论

4.static修饰全局变量

        1.例子

        2.分析

        3.结论

5.static修饰函数

        1.例子

        2.分析

        3.结论

6.static的封装作用


1.了解static

        static是C语言的一个关键字,它是一个修饰符,既可以修饰变量,也可以修饰函数

当static修饰以下内容时,我们通常称:

1.修饰局部变量---------称为静态局部变量

2.修饰全局变量---------称为静态全局变量

3.修饰函数---------------称为静态函数

2.static的作用

        1.可以改变变量的作用域或者生命周期

        2.使变量对外透明,程序员只能通过其对外的接口对变量进行操作,使程序安全性与保密性更强。

3.static修饰局部变量

        1.例子

        根据以下代码我们来体会static修饰局部变量的意义:

  1. #include<stdio.h>
  2. void fun()
  3. {
  4. //int a = 0; 不加static
  5. static int a=0; //加上static
  6. a++;
  7. printf("%d ", a);
  8. }
  9. int main()
  10. {
  11. int i = 0;
  12. for (i = 0; i < 10; i++)
  13. {
  14. fun();
  15. }
  16. return 0;
  17. }

运行程序,我们可以发现使用static与不使用static的结果不一样:

使用static:1 2 3 4 5 6 7 8 9 10

不使用static:0 0 0 0 0 0 0 0 0 0

        2.分析

        如果只是单纯地在栈区声明一个局部变量,当fun函数执行结束后编译器就会自动释放a变量,当下一次进入fun()函数时重新创建并赋值;当我们加上了static修饰符,这个局部变量就被开辟到了静态区,不会随着fun()函数的结束而释放。

        3.结论

1.static修饰局部变量改变了变量的生命周期,使静态局部变量出了作用域依然存在。到程序结束,生命周期才结束。

2.static修饰局部变量不改变了变量的作用域,既无法在main函数内部使用a。

4.static修饰全局变量

        1.例子

        根据以下代码我们来体会static修饰全局变量的意义:

  1. //代码1,static.c
  2. extern int g_val;
  3. int main()
  4. {
  5. printf("%d\n", g_val);
  6. return 0;
  7. }
  8. //代码2,add.c
  9. int g_val=2022; //不加static;
  10. //static int g_val=2022; 加上static

当add.c文件中的全局变量g_val没有被static修饰,此时static.c通过extern声明这个外部变量,运行程序,程序输出:

2022 

而当g_val被static修饰时,程序在编译时就会出现连接性错误,如下:

        2.分析

        当我们定义一个全局变量时,它是具备外部链接属性的,而如果使用static修饰这个变量,就会将其的外部链接属性变为内部链接属性,从而无法在外部文件声明调用。

        3.结论

一个全局变量被static修饰,使得这个全局变量只能在本源文件使用,不能在其他源文件内使用,static改变了全局变量的作用域。

5.static修饰函数

        1.例子

        根据以下代码我们来体会static修饰函数的意义:

  1. //代码1,static.c
  2. extern int add(int x, int y);
  3. int main()
  4. {
  5. printf("%d\n", add(2, 3));
  6. return 0;
  7. }
  8. //代码2,add.c
  9. int add(int x, int y) //不加static
  10. {
  11. return x + y;
  12. }
  13. /*
  14. static int add(int x, int y) //加上static
  15. {
  16. return x + y;
  17. }
  18. */

当add.c文件中的add()函数没有被static修饰,此时static.c通过extern声明这个外部函数,运行程序,程序输出:

5  

当add()函数被static修饰时,程序在编译时就会出现连接性错误,如下:

        2.分析

        当我们定义一个函数时,它是具备外部链接属性的,而如果使用static修饰这个函数,就会将其的外部链接属性变为内部链接属性,从而无法在外部文件声明调用。

        3.结论

一个函数被static修饰,使得这个函数只能在本源文件使用,不能在其他源文件内使用

6.static的封装作用

        当我们在设计一些项目时,通常会因为保密性和安全性的原因,一些成员属性我们希望对程序员透明,不希望程序员可以直接修改这些成员属性。这时我们就可以将这些变量用static修饰使其不具备外部链接属性。而开发者通过设计一些对外的便捷接口供程序员进行使用,程序员通过调用这些接口来间接使用这些成员属性,使得一些细节被尽可能地隐藏起来。这就是我们所说的对程序进行封装

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43351
推荐阅读
相关标签
  

闽ICP备14008679号