C语言入门篇--关键字static详解

 更新时间:2021年08月26日 15:44:07   作者:yycure  
本篇文章是C语言系列基础篇,C语言中,static是用来修饰变量和函数:1.修饰局部变量–>静态局部变量2.修饰全局变量–>静态全局变量3.修饰函数–>静态函数

1.修饰局部变量

1.1作用

ststic修饰局部变量,会改变局部变量的生命周期,不改变作用域:

生命周期:和全局变量一样具有全局性,但在内存中的位置没有改变,还在在静态存储区中。

作用域:作用域不改变。

注意:静态局部变量的初始化在整个变量定义时只会进行一次。

1.2举例

(1)不加static

#include <stdio.h>
Show()
{
	int j = 0;
	j++;
	printf("j=%d\n", j);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		Show();
	}
	return 0;
}

在这里插入图片描述

(2)加static

#include <stdio.h>
Show()
{
	static int j = 0;//生命周期变为全局的,
	j++;
	printf("j=%d\n", j);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		Show();
	}
	return 0;
}

在这里插入图片描述

(3)静态局部变量的初始化只会进行一次

#include <stdio.h>

Show()
{
	static int j = 0;
	j = 3;
	j++;
	printf("j=%d\n", j);
}

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		Show();
	}
	return 0;
}

在这里插入图片描述

2.修饰全局变量

2.1作用

static修饰全局变量,表示全局变量只在本文件内有效,取消了全局变量的跨文件属性。

2.2举例

由于static对全局变量的作用在一个文件里体现不出来,固我们创建两个文件,
在test1.c中通过extern引用外部变量g_vale,在test2.c中创建全局变量g_vale 。

(1)不加static

test1.c:

#include <stdio.h>
extern int g_vale;
int main()
{
	printf("g_vale=%d\n", g_vale);
	return 0;
}

test2.c:

#include <stdio.h>
int g_vale = 100;//定义全局变量

编译运行:

在这里插入图片描述

(2)加static

test1.c

#include <stdio.h>
extern int g_vale;
int main()
{
	printf("g_vale=%d\n", g_vale);

	return 0;
}

test2.c

#include <stdio.h>
static int g_vale = 100; //定义静态全局变量

编译运行:运行失败,无法解析外部符号g_vale

在这里插入图片描述

3.修饰函数

3.1作用

static修饰函数,和其修饰全局变量类似,表示函数只可在本文件内调用使用,取消了函数的跨文件属性。

3.2举例

由于static对函数的作用在一个文件里体现不出来,固我们创建两个文件,
在test1.c中通过extern引用外部函数Show( ),在test2.c中创建Show( )函数

(1)不加static

test1.c:

#include <stdio.h>
extern  Show();//也可以不写声明,文件在链接时也可以找到,但会出现Warning:Show()未定义
int main()
{
	Show();
	system("pause");
	return 0;
}

test2.c:

#include <stdio.h>
void Show()
{
	printf("This is Show()\n");
}

编译运行:

在这里插入图片描述

(2)加static

test1.c:

#include <stdio.h>
extern  Show();
int main()
{
	Show();
	system("pause");
	return 0;
}

test2.c:

#include <stdio.h>
static void Show()
{
	printf("This is Show()\n");
}

编译运行:运行失败,无法解析外部符号Show

在这里插入图片描述

以上就是C语言入门篇--关键字static详解的详细内容,更多关于C语言关键字static详解的资料请关注脚本之家其它相关文章!

相关文章

  • VC小技巧汇总之5则实用小技巧

    VC小技巧汇总之5则实用小技巧

    这篇文章主要介绍了VC小技巧汇总之5则实用小技巧,需要的朋友可以参考下
    2014-07-07
  • C++中的友元函数与友元类详情

    C++中的友元函数与友元类详情

    这篇文章主要介绍了C++中的友元函数与友元类详情,对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此友元函数友元类诞生了,下文我们来详细来接一下具体的有缘类吧
    2022-02-02
  • 使用C++17实现JSON库设计思路示例全解

    使用C++17实现JSON库设计思路示例全解

    这篇文章主要为大家介绍了使用C++17实现JSON库设计思路示例全解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Cocos2d-x Schedule定时器的使用实例

    Cocos2d-x Schedule定时器的使用实例

    这篇文章主要介绍了Cocos2d-x Schedule定时器的使用实例,本文的讲解内容包含在代码注释中,需要的朋友可以参考下
    2014-09-09
  • 深入学习C++智能指针之shared_ptr与右值引用的方法

    深入学习C++智能指针之shared_ptr与右值引用的方法

    智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存,今天通过本文给大家分享C++智能指针之shared_ptr与右值引用的方法,需要的朋友跟随小编一起看看吧
    2021-07-07
  • STL容器之list源码详细解读

    STL容器之list源码详细解读

    这篇文章主要介绍了STL容器之list源码详细解读,相对于vector的连续线性空间,list就显得更加复杂,它每插入或者删除一个元素,就配置或释放一个元素空间,需要的朋友可以参考下
    2024-01-01
  • C语言 小游戏打砖块实现流程详解

    C语言 小游戏打砖块实现流程详解

    打砖块游戏是一种动作电子游戏的名称。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关
    2021-11-11
  • OpenCV使用BSM统计视频中移动的对象

    OpenCV使用BSM统计视频中移动的对象

    这篇文章主要为大家详细介绍了OpenCV如何使用BackgroundSubstractor(BSM)实现视频中移动对象统计功能,文中的示例代码讲解详细,需要的可以参考一下
    2023-02-02
  • C++简单实现Dijkstra算法

    C++简单实现Dijkstra算法

    这篇文章主要为大家详细介绍了C++简单实现Dijkstra算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • 详解C语言中的函数、数组与指针

    详解C语言中的函数、数组与指针

    这篇文章主要介绍了C语言中的函数、数组与指针,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论