C面试基础题-全局变量,静态变量,局部变量(1)
0x00 局部变量和局部静态变量的区别?
1.局部变量有时也称局部动态变量,在定义时不初始化,在有些编译器中为随机数,而在有些编译器中为0。而动态变量不初始化时,系统自动初始化为0。(int类型)
2.局部变量在使用时,动态分配内存,动态回收内存。静态变量静态分配内存。
3.局部变量作用域为当前函数,静态变量作用域为整个程序。
例子:
#include <stdio.h> void fun1() { static int a = 0; a++; printf("this is fun1 a = %d ",a); } void fun2() { int a = 0; a++; printf("this is fun2 a = %d ",a); } int main() { static int c; int b; printf("b = %d,c = %d ",b,c); fun1(); printf("------------- "); fun1(); printf("------------- "); fun2(); printf("------------- "); fun2(); }运行结果:
b = 0,c = 0 this is fun1 a = 1 ------------- this is fun1 a = 2 ------------- this is fun2 a = 1 ------------- this is fun2 a = 1
分析:在fun1中定义的静态局部变量为a,当主函数为结束时,调用fun1函数,则a将一直存在于程序中,变量的值会被存储,而fun2中局部变量a在函数被销毁时重新收回。
值会被重新初始化。
0x01 全局变量和全局静态变量的区别?
1.在只有一个源文件时,没有区别。
2.在有多个源文件需要连编时,作用域为所有文件。而全局静态变量作用域只为当前文件,其他文件无法访问。如若定义为静态全局变量,连编时会产生编译错误。
3.在C中 全局变量需要使用extern,在外部文件的头文件需要重新定义一遍,才能访问得到。
4.生命周期同样为整个程序。
/** Author:Chen Xingren Time:2015/12/17 15:41 Version:1.0 comm.h **/ #ifndef COMM_H #define COMM_H #define KEY 3 #define ADMINNAME "admin" #define ADMINPWD "admin" #define BACK 0 #define QUIT 0 #include "dlist.h" extern int AdminFlag;//管理员标识位 extern int StuSaveFlag,TchSaveFlag;//标志 extern int StuIdCount,TchIdCount;//学生个数 教师个数 extern int StuMaxId,TchMaxId;//学生最大学号 教师最大学号 char *changepwd(char *pwd);//修改密码 int idgen(int *idcount); #endif ~ ~
其他文件:
/** Author:Chen Xingren Time:2015/12/16 20:46 Version:1.0 menu.h **/ #ifndef MENU_H #define MENU_H #include "dlist.h" #include "student.h" #include "teacher.h" #include "comm.h" int AdminFlag; int StuSaveFlag; int TchSaveFlag; #endif
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。