iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言的static关键字应用实例分析
  • 225
分享到

C语言的static关键字应用实例分析

2023-06-30 02:06:34 225人浏览 独家记忆
摘要

这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析

这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一,前言

对static关键字进行详细介绍

二、认识多文件

为了理解static修饰函数的作用,我们需要了解多文件的相关内容

1、多文件的创建

这里我先介绍一下头文件的创建:头文件的创建与.c文件的创建十分相似,仅仅是在选择的时候把c++文件改成.h而已

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

.h:我们称之为头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header)
.c: 我们称之为源文件,一般包含函数实现,变量定义等 (.c:c语言)
多文件就是在一个.h文件下,包含多个.c文件,比如main.c test1.c test2.c teset3.c … …

2、为什么要有多文件

在一个公司的大型项目中,预期产品所要实现的功能往往是十分复杂的,所以一般都会将功能进行模块化处理,从而便于我们进行代码的复用、代码的修改与维护以及多人协作,自然我们一个程序中就需要多个.c文件

3、为什么要有头文件

单纯的使用源文件,组织项目结构的时候,项目越大越复杂维护成本会变得越来越高!
所以我们在组织项目结构的时候会使用头文件来减少大型项目的维护成本问题。

补充:头文件中 #pragma once 的含义

大家在创建一个.h 头文件的时候会发现编译器在头文件的开头会自动加上 #pragma once

C语言的static关键字应用实例分析

相信有许多小伙伴在曾今或者现在都对这东西有着深深的疑惑,其实它是用来防止头文件被反复包含的,举个栗子

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

如上所示:我在test.h中包含了头文件<stdio.h>,但是在main.c中我又同时包含了test.h 和 stdio.h ,这就造成了stdio.h被包含了两次,使得程序在编译的时候将stdio.h 里面的内容拷贝了两份,造成代码冗余,而#pragma once 会检查该头文件是否已经被包含,如若是就不在进行拷贝。
防止头文件反复包含的另一种方法(涉及预处理内容,暂时不讲,同学们当作了解即可)

C语言的static关键字应用实例分析

4、多文件在代码中的具体体现

C语言的static关键字应用实例分析

在上图中我们在test.c 文件中中定义了一个全局变量和一个函数,然后在test.h文件中对其进行声明,最后在main.c文件中对全局变量和函数进行打印和调用,我们可以发现,这种做法是可行的,也就是说:全局变量和函数可以跨文件访问的(这个结论在解释下文static作用时会被用到)

三、最名不符实的关键字 - static

static 整体阐述

C语言的static关键字应用实例分析

上图是MSDN对static的解释,翻译过来就是:修改变量时,static关键字指定该变量具有静态持续时间(在程序开始时分配,在程序结束时释放),并将其初始化为0,除非指定了其他值。在文件范围中修改变量或函数时,static关键字指定该变量或函数具有内部链接(其名称在声明它的文件外部不可见)。这段话读起来没什么具体的概念,接下来我从static 作用的三个对象来带大家具体了解static。

1、static 修饰局部变量

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空间,栈区的使用特点是进入变量的生命周期时自动为其开辟空间,离开变量的生命周期时自动销毁对应空间,所以这里每次调用 test 函数时 a 都会被重新定义并初始化为0,所以屏幕上打印的是10个1;

图二:我们把 a 用 static 修饰后发现屏幕打印的是1到10,就好像每次调用完 test 函数后 a 并没有被销毁,而是继续使用,下次调用 test 函数时 a 直接在之前的基础上进行 ++ 操作。
所以 static 修饰局部变量的作用是:改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是在栈区上开辟空间,而是直接在静态区上开辟空间,从而使得局部变量拥有和全局变量一样的生命周期,即随着整个程序生成和销毁。

更深入的理解 static 修饰局部变量的作用:图三,我们的程序从源文件(.c文件)变成可执行程序(.exe文件)需要经过编译链接运行三个环节,而编译环节又分为预处理、编译、汇编三个阶段,在汇编阶段,编译器会把我们的C语言代码转换成汇编代码,而每一条C语言语句都对应着多句汇编代码,然而在图三中,我们可以观察到,只有 static int a = 0; 这条语句没有对应的汇编代码,也就是说,C语言在编译的时候会直接跳过这条语句。
本质上是:在编译环节的编译阶段编译器就会为被 static 修饰的局部变量分配空间,所以C程序在运行的过程中会直接跳过 static 修饰的语句,也就是说,在第二次及以上甚至第一次调用 test 函数时 static int a = 0; 这条语句都不会被执行。

补充:内存分布:

要弄清楚这个问题,我们首先得知道内存布局是怎样的:

C语言的static关键字应用实例分析

如图,左边是内存的具体划分,右边是内存的大概划分,在C语言阶段我们只需要记住右边的图就可以了,从图中我们可以看到,局部变量的内存开辟是在栈区上的,而栈区的特点是进入代码块开辟空间,离开代码块释放空间,所以局部变量的作用域和生命周期只在代码块内,而用static的变量则直接在静态区开辟空间,所以变量的生命周期得到延长。

2、static修饰全局变量

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

图一图二对比分析:我在Add.c中定义了一个全局变量g_val,因为全局变量具有外部链接属性,所以我只需要在test.c中对g_val进行声明之后就可以正常使用了,但是当我用 static 来修饰g_val时,我们发现,编译器说g_val是无法解析的外部符号;
所以 static 修饰全局变量的作用是:改变了全局变量的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是全局变量的作用域变小了。

3、static修饰函数

C语言的static关键字应用实例分析

C语言的static关键字应用实例分析

图一图二对比分析:这里和 static 修饰全局变量非常类似,我在Add.c中定义了一个Add函数,因为函数也具有外部链接属性,所以我只需要在test.c中对Add函数进行声明之后就可以正常使用了,但是当我用 static 来修饰Add函数时,我们发现,编译器说Add是无法解析的外部符号;
所以 static 修饰函数的作用是:改变了函数的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是函数的作用域变小了。

到此,关于“C语言的static关键字应用实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C语言的static关键字应用实例分析

本文链接: https://www.lsjlt.com/news/327163.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言的static关键字应用实例分析
    这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析...
    99+
    2023-06-30
  • C语言Static 关键字解析
    目录01简述02static关键字作用01简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变...
    99+
    2024-04-02
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言中的Static关键字怎么用
    这篇文章主要介绍C语言中的Static关键字怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、static关键字的基本含义首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存...
    99+
    2023-06-26
  • c语言中关键字Static怎么用
    这篇文章将为大家详细讲解有关c语言中关键字Static怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、可执行程序内存分配1. 可执行程序程序分段一个程序的3个基本...
    99+
    2024-04-02
  • 详解C语言中的Static关键字
    一、static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加sta...
    99+
    2024-04-02
  • c语言关键字static的作用是什么
    在C语言中,关键字static有以下几种作用:1. 静态变量:static关键字可以用于声明静态变量,静态变量存储在静态存储区,在程...
    99+
    2023-09-14
    c语言 static
  • C语言中static关键字的实际应用场景及使用技巧
    C语言中static关键字的实际应用场景及使用技巧 一、概述static是C语言中的一个关键字,用于修饰变量和函数。它的作用是改变其在程序运行过程中的生命周期和可见性,使得变量和函数具...
    99+
    2024-02-22
    应用场景 static 使用技巧 作用域 c语言编程
  • 全面了解C语言 static 关键字
    目录一,前言二、认识多文件1、多文件的创建2、为什么要有多文件3、为什么要有头文件4、多文件在代码中的具体体现三、最名不符实的关键字 - static1、static 修饰局部变量2...
    99+
    2024-04-02
  • C语言中static关键字的作用是什么
    本篇内容介绍了“C语言中static关键字的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!static这个关键字是“静态”的意思,...
    99+
    2023-07-05
  • 深度理解C语言中的关键字static
    目录一、函数和变量的多文件问题1.1.为什么全局变量和函数需要跨文件访问二、static修饰变量和函数2.1.static修饰全局变量2.2.static修饰局部变量2.3.为什么局...
    99+
    2024-04-02
  • C语言数据类型与sizeof关键字实例分析
    这篇文章主要介绍“C语言数据类型与sizeof关键字实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据类型与sizeof关键字实例分析”文章能帮助大家解决问题。一、前言介绍C语言当中的...
    99+
    2023-06-30
  • C语言入门篇--关键字static详解
    目录1.修饰局部变量1.1作用1.2举例(1)不加static(2)加static(3)静态局部变量的初始化只会进行一次2.修饰全局变量2.1作用2.2举例(1)不加static(2...
    99+
    2024-04-02
  • 一文搞懂C语言static关键字的三个作用
    目录static修饰局部变量static 修饰全局变量static 修饰函数总结static修饰局部变量 图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空...
    99+
    2024-04-02
  • JAVA面试题之static关键字的示例分析
    这篇文章给大家分享的是有关JAVA面试题之static关键字的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题面试官Q1:请说说static关键字,你在项目中是怎么使用...
    99+
    2024-04-02
  • c++中static关键字的作用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • C/C++的关键字static怎么使用
    这篇文章主要介绍“C/C++的关键字static怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C/C++的关键字static怎么使用”文章能帮助大家解决问题。C语言隐藏场景演示当我们同时编译...
    99+
    2023-06-29
  • C语言指针应用实例分析
    这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,...
    99+
    2023-06-30
  • C语言字符串实例分析
    本篇内容主要讲解“C语言字符串实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言字符串实例分析”吧!看下面这个我们熟知的也是最先学习的代码"Hello world!"...
    99+
    2023-06-29
  • C语言关键字总结解析
    C语言关键字总结 1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作