Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31784
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-18 13:38
文章分类

全部博文(4)

文章存档

2014年(4)

我的朋友

分类: C/C++

2014-06-18 14:39:05

C语言中到底什么用static修饰变量或者函数,使用static修饰变量或者函数又有哪些好处?我百度、Google很多篇文章都是众说纷纭,既然找不到很详细的资料那么只好我亲自出马,好东西一定要

实验标题: C语言 static 类型修饰符 详细实验过程以及结论

实验原因:参加面试经常提及static 类型修饰符的作用是什么?这个问题,而很多人则被难道了,因为刚刚从学校毕业的你们是不是很少用到类型修饰符呢?今天这篇文章就让你深入了解到 static

实验目的:深入了解 static 类型修饰符的作用

实验环境:DEV CPP 4.9.9.1

实验一:static 变量一般在声明处初始化,果没有显式初始化,会被程序自动初始化为0

实验代码:


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.      int iTestVar;
  5.      static int siTestVar;
  6.      
  7.      printf("%d,%d",iTestVar,siTestVar);
  8.                                                                          
  9.      system("pause");     
  10.      return 0;    
  11. }


结果截图:

实验结果:

添加了static 类型修饰符的变量在定义的时候即使没有赋值也已经被默认赋值为0x00

实验二:在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效,但如果加上static 类型修饰符变量将保存在全局数据区而不是保存在栈中则不会出现以上情况。

实验代码:


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. void testFunc(void)
  3. {
  4.      int iTestVar = 0;
  5.      static int siTestVar;
  6.      
  7.      iTestVar++;
  8.      siTestVar++;
  9.      
  10.      printf("%d,%d\n",iTestVar,siTestVar);
  11. }

  12. int main(void)
  13. {

  14.      testFunc();
  15.      testFunc();
  16.                                                                     
  17.     system("pause");     
  18.      return 0;    
  19. }


结果截图:

实验结果:

我们在主函数中调用两次相同的函数发现添加了static 修饰符的变量 当函数执行完毕返回后该变量的值很好的保存了下来,其中一种应用就是统计函数被调用的次数,在一些含有较多的变量并且被经常调用的函数中,可以将一些数组声明为static类型,以减少建立或者初始化这些变量的开销,

实验三:静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的

实验代码:

main.c

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include<cstdlib>

  3. static int iTestVar = 0;

  4. int main(void)
  5. {
  6.     iTestVar++;
  7.     printf("%d",iTestVar);                                                                
  8.     system("pause");     
  9.      return 0;    
  10. }
part1.c

点击(此处)折叠或打开

  1. #include "part1.h"

  2. int iTestVar = 0;



实验截图:

加了static

不加static

实验结果:

加了static 类型修饰符之后允许存在同名的全局变量,而不加则会报 " multiple definition of `iTestVar'  " 这样的错误导致无法编译


转载请注明出处:http://blog.chinaunix.net/uid-24131521-id-4309574.html   否则将承担法律风险

阅读(4328) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:STM32 自定义printf 实现多串口互用

给主人留下些什么吧!~~