C语言之static关键字详解

article/2025/9/12 15:22:05

目录

 前言:

一、几个概念

1.变量

2.局部变量和全局变量

3.变量的作用域

4.变量的生命周期

二、static关键字的作用

三、static关键字修饰局部变量

四、static关键字修饰全局变量

 五、static关键字修饰函数

 写在最后:


 前言:

           static,英文意思静态的,作为C语言常用关键字中一个很重要的关键字,其用法多样且比较难以理解。

一、几个概念

         首先,介绍几个与static关键字用法有关的重要概念,便于后面知识的更好理解。

1.变量

   变量:C语言中可变化的值用变量来表示

变量的命名规则:

(1)只能由字母(包括大写和小写)、数字下划线(_)组成

(2)不能数字开头

(3)长度不超过63个字符

(4)变量名区分大小写

(5)变量名不能使用关键字

2.局部变量和全局变量

   这里展示一段代码示例。

#include<stdio.h>int a = 2020;//全局变量
int main()
{int b = 2021;//局部变量int a = 2023;//局部变量printf("a = %d", a);return 0;
}

总结:

局部变量:定义在函数体内部的变量,只能在函数体内部使用。

全局变量:定义在函数体外部的变量,在整个程序中都可以使用。 

       我们再康康上面这段代码会发现,变量a既为全局变量又为局部变量,即出现了局部变量和全局变量同名的情况,输出变量a,运行结果如下:

 总结:允许局部变量和全局变量同名,且同名的时候,局部变量优先使用。

3.变量的作用域

   作用域:一段程序代码中所用到的名字并不总是有效或者可用,而限定这个名字可用性的代码范围就是这个名字的作用域。

(1)局部变量的作用域是变量所在的局部范围。

(2)全局变量的作用域是整个工程。

4.变量的生命周期

变量的生命周期:变量的创建到变量的销毁之间的一个时间段。

(1)局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。

(2)全局变量的生命周期:整个程序的生命周期。

二、static关键字的作用

       在C语言中,static关键字是用来修饰变量和函数的。

       1.修饰局部变量(称为静态局部变量)

       2.修饰全局变量(称为静态全局变量)

       3.修饰函数(称为静态函数)

三、static关键字修饰局部变量

       我们仍然先展示一段示例代码:

#include<stdio.h>void text()
{int a = 0;a++;printf("%d ", a);
}
int main()
{int i= 0;for (i= 0; i < 10; i++){text();}return 0;
}

     main函数中使用for循环,将text函数循环十次。代码中变量a作为局部变量,text函数中a初始值为0,a++后a的值为1,打印输出1,a每次循环进入text函数创建,出text函数销毁。故程序最后运行结果为10个1。

我们用static修饰text函数中的局部变量a,代码如下:

#include<stdio.h>void text()
{static int a = 0;a++;printf("%d ", a);
}
int main()
{int i= 0;for (i= 0; i < 10; i++){text();}return 0;
}

运行结果如下:

 

       我们可以发现,当static修饰局部变量a时,程序运行结果为1到10。由运行结果分析,当static修饰局部变量a后,变量a在text函数中进入后创建,出函数并未后销毁,而是保留了上一次循环a出text函数后的值继续作用,即局部变量a被static关键字修饰后,作用域不变,生命周期变长了。

      本质上来讲的话,需要简单了解以下知识。

      内存可分为栈区、堆区、静态区(也可称为全局区)等。栈区存放函数的参数值、局部变量的值等,这些数据进入作用域创建,出作用域被销毁。堆区用于动态内存分配等。静态区存储全局变量和静态变量,这些变量创建好后,直到程序结束后才释放。

总结:

(1)static关键字修饰局部变量不改变作用域,但是生命周期变长

(2)本质上,static关键字修饰局部变量,改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。普通的局部变量放在栈区,这种局部变量进入作用域创建,出作用域释放。局部变量被static修饰后成为静态局部变量,这种变量放在静态区,创建好后,直到程序结束后才释放。

四、static关键字修饰全局变量

       首先展示代码,我们在同一个工程中创建两个源文件,在左边源文件中定义全局变量a的值,在右边源文件中使用关键字extern,声明外部变量a。

        在右边源文件中打印输出a的值为2022,运行结果如下:

若用static关键字修饰左边源文件里的全局变量a,再次运行右边源文件,运行结果出错:

 总结:

(1)全局变量本身具有外部链接属性,可使用extern关键字声明外部文件变量,实现跨文件变量使用。但是如果全局变量被static关键字修饰后,这个外部链接属性就变成了内部链接属性,全局变量作用域变小,全局变量只能在自己所在的源文件内部使用。

(2)static关键字修饰全局变量,不改变生命周期作用域变小

 五、static关键字修饰函数

       static关键字修饰函数与修饰全局变量相似,我们在同一个工程中创建两个源文件,在左边源文件中定义函数max,在右边源文件中使用关键字extern,声明外部函数max。

       在右边源文件中打印输出max的值为2,运行结果如下:

       若用static关键字修饰左边源文件里的函数max,再次运行右边源文件,运行结果出错:

 总结:函数本身具有外部链接属性,可使用extern关键字声明外部文件函数,实现跨文件函数使用。但是如果函数被static关键字修饰后,函数只能在自己所在的源文件内部使用不能在其他源文件内使用。

 写在最后:

       我们可以使用static关键字修饰变量或者函数防止被误引用,如果不是对外提供的全局变量和函数,最好都用static关键字修饰,保证数据安全。

       我们下次见咯~~~


http://chatgpt.dhexx.cn/article/tpMHletd.shtml

相关文章

static关键字你真的懂了吗?

文章目录 static关键字1、Java中的static1.1 static关键字的定义和性质1.2 实例变量与静态变量1.2.1 实例变量1.2.2 静态变量 1.3 静态代码块1.4 *实例语句块 / 代码块1.5 static总结1.5.1 对java语句的解读1.5.2 什么时候定义为静态的&#xff1f; 2、C/C中的static2.1 局部变…

C语言extern和static关键字详解

C语言extern和static关键字详解 文章目录 1 前言2 作用域2.1 代码块作用域2.2 文件作用域 3 存储类型4 链接属性5 extern和static关键字5.1 extern关键字5.2 static关键字 1 前言 在讲extern和static关键字前&#xff0c;先讲几点相关的基础知识——作用域、存储类型、链接属性…

什么是static关键字

什么是static关键字 static关键字我们经常接触&#xff0c;不过我们一直没有讨论过它到底是什么&#xff0c;有什么具体的作用&#xff0c;那static关键字是什么呢&#xff0c;有啥用呢&#xff1f; static是静态的意思&#xff0c;是一个修饰符&#xff0c;就像是一个形容词&…

static关键字(java)

一、static的用途 1.static修饰的变量和方法是属于类的&#xff1b; 2.static修饰的变量和对象&#xff0c;方法存储在方法区的静态常量池中&#xff1b;是共享的&#xff1b; 3.可以在没有创建任何对象的前提下&#xff0c;仅仅通过类本身来调用static方法 4.static修饰的…

static关键字的用法

static关键字用法 目录 一.概述二.使用动机三.使用方法 static关键字修饰类static关键字修饰方法static关键字修饰变量static关键字修饰代码块 一. 概述 > static是一个静态修饰符关键字&#xff0c;表示静态的意思&#xff0c; ①方便在没有创建对象的情况下进行调用。可…

static 关键字用法总结

一、static 关键字的含义 static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块&#xff0c;修饰成员变量表示全局静态成员变量&#xff0c;修饰方法表示静态方法。(注意&#xff1a;不能修饰普通类&#xff0c;除了内部类&#xff0c;这是为什么&#…

java static关键字的作用是什么_static关键字有什么作用

今天主要学习下Java语言中的static关键字。 static关键字的含义及使用场景 static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。(注意:不能修饰普通类,除了内部类,这是为什么?)class A …

static关键字的作用

目录 C语言中static关键字的作用 1.static关键字修饰局部变量 2.static关键字修饰全局变量 3.static关键字修饰函数 在C中static关键的作用 1.静态成员变量 2.静态成员函数 C语言中static关键字的作用 1.static关键字修饰局部变量 概念&#xff1a; static修饰局部变量就…

静态关键词:static

static关键字的作用 static是静态的意思&#xff0c;可以修饰成员变量&#xff0c;表示给成员变量只在内存中存储一份&#xff0c;可以被共享访问、修改 成员变量可以分为2类1、静态成员变量&#xff08;有static修饰&#xff0c;属于类&#xff0c;内存中加载一次&#xff…

C# -- static 关键字

一、static关键字 static 关键字&#xff0c;用于修饰类&#xff0c;字段&#xff0c;属性&#xff0c;方法&#xff0c;构造方法等。被 static 修饰的类称之为“静态类”&#xff1b; 被 static 修饰的成员称之为“静态成员”&#xff0c;被修饰过的成员分别称为&#xff1a;…

static关键字详解

1.概述&#xff1a; static&#xff1a;就是多个对象共享同一份数据 一个类的不同对象有些共享的数据&#xff0c;这样我们就可以使用static来修饰 一旦使用了static关键字&#xff0c;那么这样的内容不再属于对象&#xff0c;而是属于类的&#xff0c;所以凡是本类的对象&…

在 C/C++中 static 关键字详解

static 关键字详解 C/C 中的 static1. 静态局部变量2. 静态全局变量全局变量 与 extren 3. static 修饰函数 C的 static 成员静态成员变量const修饰的成员除外 静态成员函数 总结&#xff1a; static是 C/C中的关键字之一&#xff0c;是常见的函数与变量&#xff08;C中还包括类…

Windows添加路由的方法

假设本来的局域网网关是192.100.10.1&#xff0c;现在要访问网关是192.100.20.0的服务器&#xff0c;可以手动添加路由。 方法&#xff1a; 1.以管理员的身份打开cmd命令窗口 2.输入 route add 192.100.20.0 mask 255.255.255.0 192.100.10.1 -p&#xff08;最后加上-p就是…

如何在 Linux 上添加路由?

在 Linux 系统中&#xff0c;路由是网络通信的关键组件之一。通过添加路由&#xff0c;您可以指定数据包在网络中的传输路径&#xff0c;从而实现网络连接和数据转发。本文将详细介绍如何在 Linux 上添加路由&#xff0c;以便您可以根据需要配置网络路由并实现灵活的网络连接。…

Linux上添加路由,删除路由,修改路由配置(route add, route del, 路由表项基本知识)

路由基础知识&#xff1a; 是由一项或者多项路由表组成的&#xff0c;每个IP报文被发送前&#xff0c;系统都会查找主机路由表&#xff0c;决定将这个报文从 哪个网卡&#xff0c;发送到哪个下一跳。路由表项可以分成主机路由&#xff0c;网络路由和默认路由3种。每条路由表项…

【网络】route和 IP route的区别|route 和 IP route 添加路由

目录 route和 IP route的区别 route 和 IP route 显示路由 route 和 IP route 添加路由 route 添加路由 IP route 添加路由 添加的路由持久化 linux下添加路由的方法 使用 route 命令 使用ip route 命令 route和 IP route的区别 route是一个相当简单的工具&#xff0c;非常适合…

addRoute动态添加路由

项目进行到最后&#xff0c;突然通知说要使用动态路由&#xff0c;在网上找了一堆方法&#xff0c;发现不是要使用vuex就是要搭配缓存&#xff0c;这个时候完全不知如何下手&#xff0c;该怎么做简单一点呢&#xff1f; 先介绍一下项目需求&#xff0c;根据用户登录后返回的唯…

CentOS7添加路由

目录 一、route命令介绍 1、语法 2、命令使用举例 默认&#xff08;网关&#xff09;路由 主机路由 网络路由 二、ip 命令 三、永久添加路由条目&#xff08;重启不会失效&#xff09; 一、route命令介绍 命令用来显示并设置Linux内核中的网络路由表&#xff0c;设置的…

添加路由表

添加永久路由&#xff08;网络重启后仍然有效&#xff09; windows系统&#xff1a; 1.cmd打开控制台 2.输入&#xff1a;route add -p目的ip地址mask 子网掩码网关地址 ubuntu系统&#xff1a; 1.任意位置新建terminal输入&#xff1a; 2.sudo chmod 777 -R /etc/rc.local回车…