初识C语言的static关键字(修饰局部变量、全局变量和函数)

news2024/9/20 18:35:05

目录

学习目标

1.static 修饰局部变量

2.static 修饰全局变量

3.static 修饰函数


学习目标

  • static修饰局部变量
  • static修饰全局变量
  • static修饰函数

1.static 修饰局部变量

(1)static修饰局部变量后,这时局部变量就是静态的局部变量。
(2)一个普通的局部变量进入函数创建,出函数销毁。但是被static修饰之后,进入函数时已经创建好了,出函数的时候也不销毁,多次调用函数时,共享一个变量。主观的感受:生命周期变长了,但是作用域不变,只能在局部范围内使用。
(3)本质是:普通的局部变量是放在栈区上的,但是被static修饰后,是存放在内存的静态区的,静态区的变量生命周期和全局变量的生命周期一样

void test()
{
	static int i = 1;
	i++;//++i; i = i+1;
	printf("%d ", i);
}

int main()
{
	int j = 0;
	while (j < 5)
	{
		test();
		j = j + 1;
	}

	return 0;
}

有趣的现象:我们把static int i = 1;这条语句反汇编后,会发现它在运行的过程中没有对应的汇编语言去执行。

静态局部变量的初始化的时机要比普通的局部变量初始化的值要早,因为静态局部变量的值在编译时就能够确定了,而普通局部变量的值可能是需要通过一系列计算才能确定。也就是static修饰的局部变量没有汇编代码,是因为在运行前就初始化完毕了。

所以想要赋值给static修饰的局部变量,只能是常量或者字面量。变量是无法赋值给static修饰的局部变量。

 

2.static 修饰全局变量

test.c文件引用了其他源文件的全局变量,此例子是test.c文件引用了add.c文件中的全局变量g_val。

//这是test.c源文件
extern int g_val;
void test()
{
	printf("test():%d\n", g_val);
}

int main()
{
	printf("%d\n", g_val);
	test();
	return 0;
}
//add.c源文件
static int g_val = 2023;

(1)全局变量是具有外部链接属性。这种属性决定了全局变量在多个文件之间可以互相使用。

(2)static修饰全局变量的时候,将外部链接属性变成了内部链接属性。g_val只能在当前的.c文件内部使用,不能在其他的.c文件中使用了。

(3)给我们的感受:改变了作用域。

3.static 修饰函数

在test.c源文件中引用add.c源文件中的函数

//test.c源文件
extern int Add(int x, int y);

int main()
{
	int a = 3;
	int b = 5;
	int c = Add(a, b);
	printf("%d\n", c);
	return 0;
}
//add.c源文件
static int Add(int x, int y)
{
	return x + y;
}

(1)函数也是具有外部链接属性的,这种属性决定了函数是可以跨文件使用的。
(2)static修饰函数是把函数的外部链接属性改成了内部链接属性使得函数只能在自己所在的.c文件中使用。

(3)给我们的感受:改变了作用域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光模块安规认证简介

背景 认证是指由认证机构证明产品、服务、管理体系符合相关技术规范的强制性要求或者标准的合格评定活动。其中产品认证是通过对产品的不同层级认证实现各级材料的可追溯性。认证按照内容分类大致包括&#xff1a;安全、电磁兼容&#xff08;EMC&#xff09;和环保等。按照必要…

PyTorch 中通道在最后的内存格式(beta)

PyTorch 中通道在最后的内存格式&#xff08;beta&#xff09; 什么是通道在最后 通道在最后的内存格式是在保留内存尺寸的顺序中对 NCHW 张量进行排序的另一种方法。 通道最后一个张量的排序方式使通道成为最密集的维度&#xff08;又称为每像素存储图像&#xff09;。 例如…

Java——《面试题——SpringCloud》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ 目录 前文 1、什么是SpringCloud 2、什…

实战:NPMYARN构建工具实践-2023.6.22(测试成功)

实战&#xff1a;NPM&YARN构建工具实践-2023.6.22(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11 openjdk 11.0.18 [rootDevops6 ~]#npm -v 6.14.12…

智能汽车 | 整车控制器(VCU)系统框图,功能拆解及供应商排名

摘要&#xff1a; 随着新能源EE架构的迭代及控制单元集成度越来越高&#xff0c;VCU的功能可能会被拆解到中央控制器域控制器&#xff0c;或者拆解到多合一的控制单元&#xff1b; VCU&#xff08;Vehicle Control Unit&#xff09;即整车控制器&#xff0c;是新能源汽车控制系…

JavaSE基础语法--static成员

假设我们现在有一个场景&#xff0c;定义一个学生类。 class Student{private String name;private int age;private int classroom_num;public Student(String name, int age, int classroom_num) {this.name name;this.age age;this.classroom_num classroom_num;} } pu…

翻筋斗觅食策略改进灰狼算法(IGWO)

目录 一、动态扰动因子策略 二、翻筋斗觅食策略 三、改进灰狼算法收敛曲线图 灰狼优化算法存在收敛的不合理性等缺陷&#xff0c;目前对GWO算法的收敛性改进方式较少&#xff0c;除此之外&#xff0c;当GWO迭代至后期&#xff0c;所有灰狼个体都逼近狼、狼、狼&#xff0c;…

HarmonyOS学习路之开发篇—多媒体开发(媒体会话管理开发)

一、媒体会话管理开发 AVSession是一套媒体播放控制框架&#xff0c;对媒体服务和界面进行解耦&#xff0c;并提供规范的通信接口&#xff0c;使应用可以自由、高效地在不同的媒体之间完成切换。 约束与限制 在使用完AVSession类后&#xff0c;需要及时进行资源释放。播放器类…

Linux常用命令——ftpshut命令

在线Linux命令查询工具 ftpshut 在指定的时间关闭FTP服务器 补充说明 功能说明&#xff1a;在指定的时间关闭ftp服务器。本指令提供系统管理者在设置的时间关闭FTP服务器&#xff0c;且能在关闭之前发出警告信息通知用户。关闭时间若设置后为"none"&#xff0c;则…

【实战项目开发技术分享】如何解决机器人运动不平稳的问题

文章目录 前言一、机器人设计的考虑因素二、控制算法的优化三、传感器改进四、实时监测与调试五、总结前言 机器人的运动平稳性对于其在各种应用中的成功执行任务至关重要。当机器人在执行任务过程中出现不稳定的运动,可能导致任务失败、损坏周围环境或甚至危及人员安全。因此…

ChatGPT在能源行业的预测场景:智能能源管理和异常检测的未来趋势

第一章&#xff1a;引言 能源是现代社会发展的关键驱动力之一&#xff0c;然而&#xff0c;传统的能源管理方法存在许多挑战&#xff0c;如能源浪费、供需不平衡以及能源异常等。为了应对这些挑战&#xff0c;智能能源管理系统逐渐崭露头角。在本文中&#xff0c;我们将探讨Ch…

基于Java+Swing实现仿QQ屏幕截图工具

基于JavaSwing实现仿QQ屏幕截图工具 一、系统介绍二、功能展示三、其它1.其他系统实现四.获取源码 一、系统介绍 实现能够实现对屏幕的随机截取&#xff0c;复制&#xff0c;保存以及添加文字等操作&#xff0c;便于用户对数据的处理。 该软件的功能&#xff1a; &#xff08…

I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式)

一.程序查询方式 CPU和I/O设备串行工作&#xff0c;CPU连接I/O设备和内存&#xff0c;CPU需要等待&#xff0c;效率很低 &#xff08;由CPU通过程序不断查询IO设备是否已经做好准备&#xff0c;从而控制IO设备与主机交换信息&#xff09; 二.程序中断方式&#xff1a; 中断&…

前端Vue自定义数字输入框 带加减按钮的数字输入框组件

前端Vue自定义数字输入框 带加减按钮的数字输入框组件&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13163 效果图如下&#xff1a; # cc-numbox #### 使用方法 使用方法 <!-- title: 标题 isSetMax: 是否设置最…

手把手叫你学会搭建FreeRTOS工程文件

手把手教你学会搭建FreeRTOS工程文件 一.序言二.提取文件2.1 Source文件夹2.2 portble文件夹2.3 Demo 文件夹 三.建立FreeRTOS工程3.1 新建FreeRTOS目录3.2 移植src文件夹3.3 移植port文件夹3.4 添加include文件夹3.5 提取FreeRTOSConfig.h文件3.5.1 拷贝FreeRTOSConfig.h文件 …

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13153 效果图如下&#xff1a; # cc-mySwiper #### 使用方法 使用方法 <!-- 自定义轮播图 swiperArr: 轮播数…

Day5——数据库基础2-SQL查询语句

网络安全学习笔记Day5 SQL查询语句&#xff08;重在实操&#xff01;&#xff01;&#xff01;&#xff09; 回顾1.中英文符号混淆2.数据库的操作流程&#xff08;回顾mysql相关语句&#xff09;3.“everything”工具 学习目标1.查询数据基本语法形式基本查询语句表单查询where…

ubuntu20下yolov4训练多目标实战

1、安装nvidia驱动和cudnn,不熟悉的小伙伴请移步&#xff1a;Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_ubuntu20.04安装显卡驱动_BetterJason的博客-CSDN博客 2、编译opencv&#xff0c;不熟悉的小伙伴请移步:ubuntu20.04 和centos8平台opencv4.5.3&am…

【八大排序(九)】计数排序-非比较排序法

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 计数排序 1. 前言2. 计数排序基本思路3. …

6.19 Nginx网站服务——服务基础

文章目录 一.Nginx服务基础1.关于Nginx的特点2.简述Nginx和Apache的差异3.Nginx 相对于 Apache 的优点4.Apache 相对于 Nginx 的优点5.阻塞与非阻塞6.同步与异步7.nginx的应用场景 二.编译安装nginx服务1.在线安装nginx1.1 yum部署Nginx1.2 扩展源安装完后直接安装Nginx 2.ngin…