当前位置: 首页 > news >正文

c语言-全局变量与局部变量

目录

1、(作用)域的概念

2、全局与局部的相对性

3、生命周期

3、静态变量static

结语:


前言:

        在c语言中,全局变量的可见范围是整个工程,而局部变量的可见范围从该变量被定义到该作用域结束,在一个变量的可见范围外是调用不了该变量的,换句话说在一个变量的可见范围内不能定义一个和该变量同名的变量,而在该变量的可见范围外可以定义一个与该变量名字一样的变量。

        全局变量的生命周期是整个程序的生命周期,而局部变量的生命周期是从该变量在他的作用域中被定义开始,直到出了该作用域就结束,结束意味着该局部变量以及他的值会被系统销毁。

1、(作用)域的概念

        首先再了解全局变量和局部变量前,最重要的是了解什么是作用域,通常用一对大括号”{}“括起来的区域就是一个作用域,而在该作用域创建的变量为局部变量,重要的是作用域与作用域之间是互不干扰的,是相对独立的两块区域。

        比如最常见的main函数就是用一个大括号括起来的:

#include<stdio.h>int main()
{//左大括号//main函数的作用域//...int a = 12;//a为局部变量return 0;
}//右大括号

        不仅仅只有函数是用大括号进行规划的,if语句和while循环、fot循环等等都是用大括号”{}“进行规划作用域的,因此在这些大括号中创建的变量也可以称为局部变量,且相互独立。

        例子如下:

#include<stdio.h>int main()
{int a = 12;if (1){int a = 20;}for (int a = 1; a > 0; a--){}while (a--){int a = 100;}printf("hello world");return 0;
}

        以上代码虽然在同一个main函数内定义了4个a变量,但是是在不同的作用域中都有的,因此最后可以正常打印出了hello world,说明该程序没有问题。


        函数区分作用域的例子如下:

#include<stdio.h>void func()
{int a = 20;
}int main()
{int a = 12;func();printf("hello world");return 0;
}

        最后依旧能够打印出hello world,表示该程序没有问题。

2、全局与局部的相对性

        全局变量和局部变量是具有相对性的,比如一个局部变量a,他相对于他作用域外是局部的,但是他相对于他的作用域里面的某个作用域是全局的。

        示例代码如下:

#include<stdio.h>int main()
{int a = 12;//相对于if语句里的作用域,该a是全局变量if (1){printf("%d ", a);//可以打印出a的值}return 0;
}

        运行结果:


         若一个作用域和该域之外的作用域都有一个同名变量a,若想在该作用域中打印该变量的值,则打印的是局部变量的值,遵循局部优先的法则。

         示例代码如下:

#include<stdio.h>int a = 1020;//全局变量int main()
{printf("%d\n", a);//由于局部变量的可见范围是在其创建时才开始,因此这里打印的是1020int a = 12;//局部优先printf("%d\n", a);if (1){printf("%d\n", a);//由于局部变量的可见范围是在其创建时才开始,因此这里打印的是12int a = 20;//局部优先printf("%d\n", a);}return 0;
}

        运行结果:

3、生命周期

        一个变量出了其作用域就会被销毁,表示其生命周期结束了,生命周期通常是用函数中的局部变量来做解释,因为一个函数被调用完成后会被销毁,其函数中的局部变量也就跟着销毁了。

        示例代码如下:

#include<stdio.h>void func()
{int a = 2;//出了函数,变量a就被销毁
}int main()
{func();printf("%d ", a);//此处会找不到变量aif (1){int a = 12;//出了作用域,也可以理解为变量a被销毁}printf("%d ", a);//此处也会找不到变量areturn 0;
}

3、静态变量static

        static的作用是延长局部变量的生命周期,但是不会延长其可见范围,也就是某个作用域中的变量加了static后,下一次来到该作用域时,该变量不会再次被初始化,而是接着用之前的值,但是在该变量作用域外的作用域依然无法调用他。

        示例代码如下:

#include<stdio.h>void func()
{static int a = 2;//只会初始化一次a,后续就跳过初始化的步骤a++;printf("%d ", a);
}int main()
{func();func();func();//printf("%d ", a);//此处依然找不到areturn 0;
}

        运行结果:

        没加static的运行结果: 

        从结果可以看到,如果没有加static,那么局部变量a在调用完函数func后就跟着销毁了,则下一次调用函数func时,a又会重新初始化。如果加了static,a只会初始化一次,并且不会跟着函数一起销毁,后续调用函数func时,a会保留之前的值进入该函数。

结语:

        全局变量和局部变量作为c语言中的基础,其虽然看起来不起眼,但是对今后的学习都是非常重要的一环知识,最后希望本文可以给你带来更多的收获,如果本文对你起到了帮助,希望可以动动小指头帮忙点赞👍+关注😎+收藏👌!如果有遗漏或者有误的地方欢迎大家在评论区补充~!!谢谢大家!!( ̄︶ ̄)↗

相关文章:

c语言-全局变量与局部变量

目录 1、&#xff08;作用&#xff09;域的概念 2、全局与局部的相对性 3、生命周期 3、静态变量static 结语&#xff1a; 前言&#xff1a; 在c语言中&#xff0c;全局变量的可见范围是整个工程&#xff0c;而局部变量的可见范围从该变量被定义到该作用域结束&#xff0c…...

【Spring】00 入门指南

文章目录 1.简介2.概念1&#xff09;控制反转&#xff08;IoC&#xff09;2&#xff09;依赖注入&#xff08;DI&#xff09; 3.核心模块1&#xff09;Spring Core2&#xff09;Spring AOP3&#xff09;Spring MVC4&#xff09;Spring Data5&#xff09;Spring Boot 4.编写 Hel…...

BIM 技术:CIM (City Information Modeling) 1-7 级

本心、输入输出、结果 文章目录 BIM 技术&#xff1a;CIM &#xff08;City Information Modeling&#xff09; 1-7 级前言城市信息模型&#xff08;CIM&#xff09;概述城市信息模型分级介绍CIM 1CIM 2CIM 3CIM 4CIM 5CIM 6CIM 7 花有重开日&#xff0c;人无再少年实践是检验真…...

c++ websocket 协议分析与实现

前言 网上有很多第三方库&#xff0c;nopoll,uwebsockets,libwebsockets,都喜欢回调或太复杂&#xff0c;个人只需要在后端用&#xff0c;所以手动写个&#xff1b; 1:环境 ubuntu18 g(支持c11即可) 第三方库:jsoncpp,openssl 2:安装 jsoncpp 读取json 配置文件 用 自动安装 网…...

kali虚拟机无网络

1.查看虚拟机的网卡模式 在虚拟机设置里&#xff0c;一般选择桥接模式&#xff0c;也可以选择NAT模式。 2、你的IP地址是否写死了&#xff08;设置为静态IP&#xff09; vim编辑模式下的命令&#xff1a; 按a或i进入编辑模式&#xff0c;然后按esc键退出编辑模式&#xff0c;s…...

Unity2023.3(Unity6)版本开始将可以发布WebGPU

翻译一段官网上的话&#xff1a; 利用Unity 2023.3(正式发布时应该称为Unity6)中最新的WebGPU图形API集成&#xff0c;尝试最大限度的提升您的网络游戏的真实感。 通过与谷歌的战略合作&#xff0c;Unity实时3D平台的强大的图形功能现在为图形丰富的网络游戏进行微调&#xff0…...

计算机网络期末考试A卷及答案

一、选择题&#xff08;30分&#xff0c;每题1分&#xff09; 世界上第一个网络系统是( C )。 A、ENIAC B、以太网 C、ARPANET D、DECNET 2&#xff0e;在常用的传输介质中&#xff0c;&#xff08; C &#xff09;的带宽最宽、信号传输衰减最小、抗干扰能力最强。 A.双绞线 …...

<蓝桥杯软件赛>零基础备赛20周--第10周--二分

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…...

C++友元类,工厂模式和继承的融合案例

//友元没有继承性&#xff0c;没有传递性,所以在animal中定义友元类是无效的class animal{public:animal(){};virtual ~animal(){};};class Cat:public animal{friend class animalFactory;private:Cat(){}private:string m_name;string m_color;public:void about(){cout<&…...

使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值

使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值 JavaScript 中的 ?? 运算符称为 nullish 合并运算符。该运算符接受任一侧的操作数&#xff0c;并且仅当左侧操作数为空值时才返回右侧操作数。这个运算符绝对是一个较新的运算符&#xff0c;它是在 ES2020 …...

Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

问题描述&#xff1a;Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 最近在学习如何将YOLO部署在手机端&#xff0c;出现了许多错误&#xff0c;下面这个错误是手机和电脑连结之后&#xff0c;点击run之后出现的错误。 解决办法&#xff1a;将JDK版本将为…...

Python Django Suit:构建现代化的Django后台管理

概要 Django Suit是一款为Django后台管理提供现代、优雅界面的第三方应用&#xff0c;它致力于提升Django开发者的管理体验。本文将深入介绍Django Suit的安装、配置和高级功能&#xff0c;提供详实的示例代码&#xff0c;帮助大家更好地使用和定制Django后台管理界面。 安装与…...

电子学会C/C++编程等级考试2021年09月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:双端队列 定义一个双端队列,进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。编程实现这个数据结构。 时间限制:1000 内存限制:65535输入 第一行输入一个整数t,代表测试数据的组数。 每组数据的…...

SpringBoot 源码解析

前言 本文只是纯源码分析文章&#xff0c;阅读者需要有Spring或者SpringBoot使用经验。 SpringBoot 源码解析 SpringBoot 源码解析1&#xff1a;环境搭建 SpringBoot 源码解析2&#xff1a;启动流程1 SpringBoot 源码解析3&#xff1a;启动流程2 SpringBoot 源码解析4&#…...

dockerfile---创建镜像

dockerfile创建镜像&#xff1a;创建自定义镜像。 包扩配置文件的创建&#xff0c;挂载点&#xff0c;对外暴露的端口。设置环境变量。 docker镜像的方式: 1、基于官方源进行创建 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容器。是一个白板&#xff0c…...

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试

原文连接&#xff1a;Raspberry PI Codesys EtherCAT步进驱动ECR60 Motion功能测试 – 个人资料收集 (rtplc.com) <div class"post_info_wrapper "> <p class"has-drop-cap">运动控制功能是codesys及EtherCAT通讯的重要功能&am…...

03 Temporal 详细介绍

前言 在后端开发中&#xff0c;大家是否有遇到如下类型的开发场景 需要处理较多的异步事件需要的外部服务可靠性较低需要记录保存某个对象的复杂状态 在以往的开发过程中&#xff0c;可能更多的直接使用数据库、定时任务、消息队列等作为基础&#xff0c;来解决上面的问题。然…...

【算法】【动规】乘积为正数的最长子数组长度

跳转汇总链接 &#x1f449;&#x1f517;算法题汇总链接 1.1 乘积为正数的最长子数组长度 &#x1f517;题目链接 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积…...

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的&#xff0c;节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色&#xff1a;master 和 node。 master 节点&#xff1a;master 节点负责控制和管理整个集群…...

Spring之容器:IOC(1)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

nlp_gte_sentence-embedding_chinese-large在软件测试用例生成中的应用

nlp_gte_sentence-embedding_chinese-large在软件测试用例生成中的应用 1. 引言 软件测试是确保产品质量的关键环节&#xff0c;但传统的手工编写测试用例方式往往效率低下且容易遗漏重要场景。测试工程师需要反复阅读需求文档&#xff0c;手动提取测试要点&#xff0c;这个过…...

终极指南:GoldHEN Cheats Manager - PlayStation 4游戏作弊代码完整管理方案

终极指南&#xff1a;GoldHEN Cheats Manager - PlayStation 4游戏作弊代码完整管理方案 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager GoldHEN Cheats Manager 是一款专为PlaySt…...

Fish Speech 1.5入门指南:无需Python基础,5步完成高质量语音生成

Fish Speech 1.5入门指南&#xff1a;无需Python基础&#xff0c;5步完成高质量语音生成 你是不是也遇到过这些烦恼&#xff1f;想给视频配音&#xff0c;但自己的声音不好听&#xff0c;找配音员又太贵&#xff1b;想制作有声书&#xff0c;但录制过程繁琐&#xff0c;效果还…...

SWF逆向工程工作流优化:JPEXS Free Flash Decompiler效率提升技巧

SWF逆向工程工作流优化&#xff1a;JPEXS Free Flash Decompiler效率提升技巧 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler&#xff08;简称FFDec&#…...

终极指南:如何快速搭建NixOS配置开发环境 [特殊字符]

终极指南&#xff1a;如何快速搭建NixOS配置开发环境 &#x1f680; 【免费下载链接】linux-nixos-hyprland-config-dotfiles Linux &#x1f427; configuration based on NixOS ❄️, Hyprland, and Catppuccin Macchiato theme &#x1f638; for a consistent, complete, a…...

搭建专属汽车电子测试 AI 助手

专栏&#xff1a;《AI 汽车电子测试实战》第 15 篇 作者&#xff1a;一线汽车电子测试工程师 适合人群&#xff1a;想搭建私有 AI 助手的测试团队、关注数据安全的工程师开篇&#xff1a;为什么需要专属 AI 助手&#xff1f; 这是我上个月在某车企的 AI 部署项目中的真实经历。…...

OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控

OpenClaw故障自愈方案&#xff1a;Qwen3-32B镜像异常重启监控 1. 问题背景与解决思路 上周我的OpenClaw自动化助手突然"罢工"了——原本应该定时执行的日报生成任务没有按时完成。排查后发现是底层Qwen3-32B模型服务因OOM异常退出。这种情况在长期运行的AI服务中并…...

5步掌握抖音音乐批量下载:douyin-downloader高效使用指南

5步掌握抖音音乐批量下载&#xff1a;douyin-downloader高效使用指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作的浪潮中&#xff0c;背景音乐已成为视频作品的灵魂元素。然而&#xff0…...

文艺复兴,什么是XSS,常见形式(二)

前言 本文将继续介绍XSS的常见形状&#xff0c;依赖于portswigger提供的免费Lab环境&#xff0c;将重点介绍关于使用脚本来进行表单XSS验证以及针对标签的模糊测试。 Lab: Stored DOM XSS 这是一个存储型的DOM类的XSS&#xff0c;具体的是当你将内容提交到评论区&#xff0c…...

手把手教你用ThinkPHP6和Uniapp从零搭建一个物业设备巡检小程序(附完整源码)

从零构建物业设备巡检系统&#xff1a;ThinkPHP6与Uniapp全栈实战指南 物业设备巡检是保障设施安全运行的关键环节&#xff0c;传统纸质记录方式效率低下且难以追溯。本教程将带您从零开始&#xff0c;基于ThinkPHP6后端框架与Uniapp跨端方案&#xff0c;构建一个功能完整的移动…...