C语言static关键字的作用(有三个作用)
1.具有隐藏的作用
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
a.c:
char a = 'A'; // global variable
void msg()
{printf("Hello\n");
}
main.c
int main( void)
{ extern char a; // extern variable must be declared before useprintf("%c ", a);( void)msg();return 0;
}
程序的运行结果是:
A Hello
你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。
如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。
2.保持变量内容的持久
变量不加 static 修饰:
#include <stdio.h>void test()
{int num = 0;num++;printf("%d ", num);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}
输出:1 1 1 1 1 1 1 1 1 1 1
变量被 static 修饰:
#include <stdio.h>void test()
{static int num = 0;num++;printf("%d ", num);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}
输出:1 2 3 4 5 6 7 8 9 10
3.默认初始化为0(static变量)
其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。
static int x; //初始化时x=0;
static 关键字在C++中的作用:静态成员变量和静态成员函数
C++ - 静态成员变量和静态成员函数_同学小辜的博客-CSDN博客
C语言static关键字的作用(有三个作用)相关推荐
- c语言 static 关键字的作用
static 关键字的作用 全局静态变量 局部静态变量 静态函数 类的静态成员 类的静态函数 全局静态变量 在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量. 静态存储区,在整个 ...
- C语言 Static关键字的作用详解
前言: static 是用来修饰函数和变量的,可以修饰局部变量,全局变量以及函数 一.修饰局部变量 (称为静态局部变量) 来看俩段代码: 对于第一段代码来说,它循环5次,每次调用一下fun()函数, ...
- C语言学习及应用笔记之二:C语言static关键字及其使用
C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些.我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂. 一般来说static关键字的常见用 ...
- [C语言]static关键字--#define 定义常量和宏--初识指针--初识C语言(四)
文章目录 前言 一,static关键字 二,#define 定义常量和宏 三,初识指针 总结 前言 本节主要记录初识C语言第四节内容. 内容包括:static关键字------#define 定义常量 ...
- C语言static关键字修饰变量及函数时的用法和原理
目录 一.static关键字修饰局部变量 二.static关键字修饰全局变量 三.static关键字修饰函数 一.static关键字修饰局部变量 在内存中,往往将其分为三个区块,栈区,堆区,静态区.C ...
- c语言的关键字static,C语言static关键字
1.static 全局变量与普通全局变量的区别: 在定义变量时,全局变量之前再冠以 static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.两者在存储方式 ...
- C语言static 关键字总结
static 关键字总结: 变量可以被static 修饰,意义有发生变化吗? 下面我们看个例子: (1)变量不加 static 修饰 #include <stdio.h>void test ...
- c语言static关键字参数
static 关键字. 1.static修饰局部变量: ① 整个生命周期延长, ② 静态局部变量只会被初始化一次,以后每一次调用静态局部变量,就会使用上一次调用完保存的值. ③ 只能被作用域的变量和函 ...
- 浅谈C语言static关键字 静态变量 函数
目录 static对变量修饰 局部变量 全局变量 函数 static对变量修饰 局部变量 普通局部变量存储于进程栈空间,使用完毕会立即释放. 静态局部变量存储于进程的全局数据区,即使函数返回,它的值也 ...
最新文章
- 哪个牌子的平板电脑好_中山密码锁哪个牌子好
- Xamarin图表开发基础教程(1)
- wdcp后台重启服务器后mysql打不开
- 查找任意数目参数的最大值
- 为Mac安装homebrew
- STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)+ 中断
- hbase 查询_云HBase发布全文索引服务,轻松应对复杂查询
- SELECT语句选项
- 计算机专业术语的通俗解释,计算机专业术语解释
- oracle 11g job创建,Oracle 11g 手动创建库完整实施过程
- HFSS阵列天线设计与仿真3
- 全球与中国激光共焦扫描显微镜市场深度研究分析报告
- css设置logo图片大小,修改ecshop网站logo图片尺寸大小
- Sql server 实现增删改查
- vscode汇编环境配置
- 开源传感器网络平台OpenWSN
- Qt-QCustomPlot
- 三大报再呼救市:A股估值到了崩溃边缘
- 产生按指数分布的随机数----摘自csdn
- 小程序源码:2022强大的修复版趣味心理测试小程序源码,趣味测试引流裂变神器-多玩法安装简单