首页 > 其他分享 >12.1.1 全局变量

12.1.1 全局变量

时间:2024-10-27 09:48:31浏览次数:3  
标签:变量 定义 12.1 gall 全局变量 我们 函数

1.全局变量

我们之前所见过的所有的变量,都是定义在函数内部的.那个时候我们说,这些变量呢,叫做本地变量,其实当时我们没说,如果c语言当中所有的变量都是定义在函数内部的,那就没有本地变量非本地变量一说了对吧.正是因为我们可以把变量定义在函数的外面,这时候它就不是本地变量了.所以如果有变量定义在函数外面,那么这些变量呢叫做全局变量.本地变量当时我们说最大的特点是什么,进这个函数的时候这个变量才出现,一旦离开这个函数,它就不存在了.只有在这个函数内部,它才可见,才能够被访问.它的生存期和作用域是一致的,都是在函数内部,而对于全局变量就不一样了.

我们来看一个例子:

现在我们有一个变量叫做gall,它是定义在函数外面的,我们给了它一个初始值12.这个变量就是全局变量,他和任何函数都没有关系.和main没有关系,和f也没有关系.它的作用域是大于所有函数的.我们首先在main里面做输出,_func_是一个字符串,它表示的是当前这个函数的名字.我们输出了之后去调用f函数,f函数做的事情是先输出在f函数里的gall,发现和main里面的那个gall一样,然后让gall+2,再打印gall,最后返回gall的值.然后回到main,我们打印gall,发现和f函数最后的gall的结果一样,都是14. 

2.全局变量的初始化

当然我们可以对全局变量做初始化.但是如果我们没有给它定义初始化会怎么样?我们之前在讲本地变量的时候,我们一直在反复强调这件事情,本地变量不会得到默认的自动的那么一个初始值,如果你不对它做初始化,你直接去使用那个本地变量的值,你可能会得到乱七八糟的结果,也就是这个变量所占内存原来就有的东西.但是对于全局变量来说.

我们尝试让gall=f();我们发现编译器给了我们一个error,它说这个右边的东西不是一个编译时刻的常量,因为要调用一个函数才能得到这个结果.那如果我们这样,我们定义gall=12,然后再定义一个g2=gall,这样行不行呢?编译器一样说不行.他看到的是你把一个变量的值赋给了g2.但如果我们在定义gall的前面再加一个const,它就可以了.当然我们非常不建议大家用这种方式来初始化像g2这样的一个全局变量,全局变量的值不应该和另外一个全局变量联系在一块.这事儿到后面我们讲大程序的时候你就会明白,我们现在的两个全局变量都是写在同一个.c文件里头的.它们的初始化的顺序是相对比较明确的.如果反过来就会有问题.

另外,如果函数内部存在与全局变量同名的变量,则全局变量被隐藏.

标签:变量,定义,12.1,gall,全局变量,我们,函数
From: https://blog.csdn.net/qq_73908174/article/details/143243910

相关文章

  • 12.1.2 静态本地变量
    如果对于一个本地变量,你在这个本地变量的类型的前面加上一个新的关键字叫static,这个时候这个本地变量就成为一种新的本地变量,我们叫他静态本地变量.本来我们说本地变量的生存期就在这个函数里头对吧,进去的时候才有,离开的时候就没有了.而我们这个这个静态本地变量有一个非......
  • Ubuntu20.04 更新Nvidia驱动 + 安装CUDA12.1 + cudnn8.9.7
    一、概述    最近客户给了几台GPU服务器,长期放置落灰那种,然后想利用起来,所以上去看看了配置,系统是Ubuntu20.04,相关的驱动版本稍嫌老一些,所以需要更新Nvidia驱动,同时在安装CUDA和CUDNN,查看了显卡型号之后,打算使用onnxruntime进行推理,对比了版本,最后选择了CUDA12.1+CU......
  • 实时数据化可视化工具LightningChart .NET v12.1.1全新发布
    LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。立即获取LightningChart.NETv12.1.1正......
  • C++中如何使用单例模式管理全局变量
    单例模式(SingletonPattern)是一种常用的设计模式,旨在确保一个类只有一个实例,并提供一个全局的访问点。要使用单例模式管理全局变量,可以通过控制类的实例化过程,防止多个对象的创建。这样做不仅可以保证数据一致性,还能避免使用直接的全局变量带来的命名冲突和潜在的多线程安全问题。......
  • Connection to tcp://192.168.112.137:1935?tcp_nodelay=0 failed: Connection timed
    记录一下自己的报错和解决步骤输入catnginx.conf 查看Nginx的配置文件nginx.conf修改nginx核心配置文件nginx,添加rtmp模块rtmp{                                          ......
  • C语言中以下概念,以及这些概念之间的关系: 1.代码段 2.数据段 3.堆栈 4.全局变量 5.局部
    在C语言程序中,内存布局通常被分为几个主要的区域,每个区域都有不同的用途。以下是关于代码段、数据段、堆栈、全局变量、局部变量和函数的详细描述,以及它们之间的关系。1.代码段(TextSegment)代码段(也称为textsegment)是程序的只读部分,存储的是程序的指令(即代码)。这是可执行文......
  • 【C语言基础】全局变量与局部变量的深入解析
    目录一、全局变量1.1.定义与声明1.2.特性1.2.1.生命周期1.2.2.作用域1.2.3.跨文件访问1.2.4.限制访问范围1.3. 示例1.4.注意事项1.4.1.过度使用全局变量导致代码难以理解和维护1.4.2.限制全局变量的使用范围1.4.3.清晰的命名和文档1.4.4.考虑替代方案......
  • 关于C++当中全局变量的释放问题
    一、由来主要是在修改公司的一个MFC项目的时候遇到的问题,我在MFC页面的析构函数当中对一个全局图像变量进行了释放,具体如下:ai_engine_OCR::~ai_engine_OCR(){//及时释放内存if(g_pImg_open!=NULL){deleteg_pImg_open;g_pImg_open=NULL......
  • 【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分
    收录于我的专栏:AI修炼之路简介论文中英文名Retrieval-AugmentedGenerationforLargeLanguageModels:ASurvey面向大型语言模型的检索增强生成:综述论文地址arxiv地址:https://arxiv.org/abs/2312.10997精读理由这篇综述论文对RAG在大型语言模型中的应用进行了......
  • vue3如何将 app 全局变量对象变为响应式并监听到某个属性的改变
    需求:通过 getData()方法获取到数据对象,想要在屏幕方向改变的时候,给获取到的对象设置  orientation,能实时修改方案:使用reactive包裹,template直接使用全局变量下的属性,watch直接监听对应属性代码如下:main.jsconstconfig=reactive(getData())//设置屏幕方......