全局变量与局部变量优先级调用的问题—C/C++程序基础(二)

线程的共享资源和私有资源:全局变量 局部变量 堆 栈 全局变量和局部变量在内存中的区别 C语言经过编译之后将内存分为以下几个区域: (1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。 (2)堆(heap):用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,程序员申请的空间... 阅读详情

案例分析

看如下代码,思考一下,每次打印出来的value值是多少呢? 

#include<iostream>
#include <stdio.h>

int value = 5;

void printvalue()
{
	printf("value = %d\n", value);
};

int main()
{
	printvalue();
	printf("value = %d\n", value);

	printf("****************\n");

	int value = 1;
	printvalue();
	printf("value = %d\n", value);

	printf("****************\n");

	::value = 2;
	printvalue();
	printf("value = %d\n", value);
	

	system("pause");
	return 0;
}

运行结果: 

 对上面的代码分析一下,代码的逻辑是,先在main函数之外,定义了一个全局变量value,值为5。当主函数运行的时候,通过编写的printvalue()函数和通用的打印函数printf函数直接调用,得到的打印结果是一致的,都是5,这个地方符合常识,没啥可以说的,接着往下看。

下面我又重新设置了一个局部变量,也是value,值设置为1,再调用刚才的那两个函数,会发现,结果变了,用 printvalue()函数打印的结果为5(打印的是全局变量的值),用printf函数打印的结果为1(打印的是局部变量的值)。有点违背常识了,为啥这俩打印的结果不一样了呢?

那这是为什么呢?我抱着尝试的态度,更改了一下定义全局变量的位置,把原来“int value = 5;”这条语句,放在了printvalue()函数定义的后面,再尝试运行一下,发现,竟然报错了!

根据出现的这种情况,就可以大胆的进行推断了,首先,要指明的是printvalue()函数的定义方式是有错误的,因为它没有传入参数,一切的错误都起源于这里,按照编译器的正常处理顺序,应该是这样的,在运行的时候,遇到一个函数定义printvalue(int value),会先进行初始化,函数定义中有写明输入的参数,编译器会把存放这个参数内容的空间腾出来,然后,等主调函数中真用到了 这个函数的时候,会把需要的值给填进去用,这种机制非常的稳定且高效。

但是,如果定义的函数没有填参数,就造成了最开始的程序出现的问题那样,首先,定义了一个全局变量,value,并填进去为5的值,接着,到了定义printvalue()这个函数的地方,定义的时候发现这个函数没有规定输入参数,但函数体中有用到一个叫value的变量,回想刚才刚刚的确定义了一个也叫value的东东,正好就给填进去吧!于是,原先,定义好的全局变量value,就被printvalue()绑定了,

所以,当主调函数中,用到了printvalue()的时候,调用的就都是全局变量value了。

这也就解释通了,为啥刚才把定义全局变量value的那一行语句,移到了printvalue()函数的下面,就出现报错的问题了,因为在初始化printvalue()的时候,编译器不知道它里面的说的value到底是个啥,该分配多少内存,该存入啥值,于是就报错了!

那为什么普通调用printf函数的时候,调用的是局部变量的呢?这是因为在main函数中,当局部变量和全局变量同时存在的时候,优先引用局部变量,而不去引用全局变量。

再接着,我通过“::value = 2”,问这样操作的,更改的是全局变量下的value值,还是局部变量下的value值呢?答案是,全局变量下的。可以看出"::"这个符号,是直接来操作全局变量的。

经验总结

  • C++中定义的函数,必须有输入参数(或者说是,形参列表)。
  • 在main函数中,当局部变量和全局变量同时存在的时候,优先引用局部变量,而不去引用全局变量。
  • "::"这个符号,可以直接来操作全局变量的。
电子技术——共栅和共源共栅放大器的高频响应 我们在之前学过无论是是CS放大器还是CE放大器,都可以看做是一个带通(IC低通)滤波器。在高频处的响应收到输入电容 $C_{in}$ 的限制(主要是米勒效应)。因此,若想扩大放大器的带宽,我们必须减小米勒效应,一种方案就是共栅放大器。 阅读详情

相关推荐

从AAAI 2025被拒到ACM MM 2025录用:我的论文投稿经验与教训总结

本文分享了作者从AAAI 2025被拒到ACM MM 2025录用的论文投稿经验与教训。详细解析了格式要求、可复现性清单等关键细节,提供了精准转投策略和提升录用概率的实用技巧,帮助研究者避免常见错误并优化投稿策略。

weixin_29207533的博客 496

C++中的局部变量,全局变量,名空间变量优先级

萌新记录自己学习遇到的问题

qq_66582995的博客 523

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

qq_44703886的博客 3601

局部变量和全局变量

局部变量与全局变量的定义、生命周期和优先级

努力进步的配菜 1838

增量式PID的P和I怎么理解(一)

增量式PID的P、I理解之推翻片 据我所知的资料里关于PID三个参数的理解是这样的:(我这里只说P和I,先不说D) P的作用:比例P可以加快系统调节速度,P过小调节时间变长,响应性不够,P越大响应性越高超调也越严重,过大的P会使系统振荡。 I的作用:消除静差,提高控制精度,I越大越滞后,过大会使系统振荡。 ...

fangchenglia的博客 1万+

我在腾讯上构建了一个人人能用的机载适航知识库

当ChatGPT掀起生成式AI的浪潮时,工程师们发现了一个尴尬的现实:询问“如何编写软件合格审定计划”,AI的回答可能充满似是而非的术语,却无法精确关联FDO-178C的对应内容。现在市面上有许多的AI大模型+适航知识库的方案,之前我的文章介绍了一种本地大模型加知识库的解决方法。此外,ima知识库的容量大小可以到30GB(企鹅大气),只要管理好文件的格式,理论上是完全可以把机载适航相关的内容容纳进去的。后续会不断增加适航法规,适航规章,适航标准,适航书籍,适航相关的论文,以及网上其他一些优秀的内容。

qq_41854911的博客 1215

局部变量 全局变量 函数的嵌套

day10笔记:局部变量:  1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)  2. 局部变量只能在函数内部使用  3. 局部变量在函数调用时才能够被创建,在函数调用结束之后会自动销毁全局变量:  1. 定义在函数外部,模块内部的变量称为全局变量  2. 所有的函数都可以直接访问"全局"变量,但函数内部不能直接通过赋值语句来改变全局变量 示例见:  variable.py 局部变...

JoyEvansFeng的博客 1845

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1958

No.7、函数

Python的进阶之路 No.7、函数模块 函数是什么? 函数是组织好的,可重要使用的,用来实现单—,或相关联功能的代码段。 函数能提高应用的梩块性,和代码的重鲤利用率。 就像炒菜机可以封装好烹汪的各种步骤—样,函数也可以把我们要执行的代码放到—起,需要执行的时候,直接调用就可以。 实例: 平方函数, 输入变量 x 返回其平方值X^2: def square(x): s = x * x return s 函数的定义: a = 3 //调用函数, 并打印出来 print square(a)

weixin_46134852的博客 550

华为OD机试真题 新系统 2026-08-16 Python&JS【智能家居模式调度优化】

智能家居系统中有多个自动化联动模式,每个模式 modes[i]=[start_time,end_time,power],表示它在左闭右开区间 [start_time,end_time) 内持续消耗固定功率 power。

MISAYAONE的博客 64

PTC Creo软件二次开发:使用C++进行Creo二次开发实战

C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。由Bjarne Stroustrup在贝尔实验室开发,最初作为C语言的增强版出现,后来发展成为一种独立的语言。C++不仅保留了C语言的高效性和灵活性,还引入了类、模板、命名空间等高级特性,使其成为开发复杂系统和软件的理想选择。

kkchenjj的博客 4016

【C语言基础】Chap. 2. 基本概念

一般的,在一个变化过程中,假设有两个变量x、y,如果对于任意一个x都有唯一确定的一个y和它对应,那么就称x是自变量,y是x的函数。x的取值范围叫做这个函数的定义域,相应y的取值范围叫做函数的值域。...

m0_73088370的博客 1658

2026年医疗AI的可信革命全栈实现(上)

医疗AI可信化:贝叶斯网络与向量数据库的协同架构 本文探讨2026年医疗AI发展的关键转折点——从追求生成能力转向构建可信决策系统。核心观点认为,医疗AI下一阶段的竞争焦点在于不确定性量化和错误传播约束,而非单纯的问答流畅度。研究提出以Python为开发语言、结合向量数据库与贝叶斯网络的混合架构: 技术分层 语言层(LLM):处理自然语言交互与工具调用 证据层(Milvus/Qdrant):实现可审计的临床知识检索 概率层(pgmpy/PyMC):执行贝叶斯推理与风险路由 治理层:确保权限控制与人工复核机制

AllenLV的博客 1139

C语言局部变量与全局变量重名时的优先级问题(当局部变量和全局变量同时存在的时候,优先引用局部变量,而不去引用全局变量)

参考文章:全局变量与局部变量优先级调用的问题—C/C++程序基础(二)

Dontla的博客 4496

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言旅途之外部(全局)变量和局部变量之间的关系

Ⅰ、简单的入门: ①、//代码摘下直接可以运行 #include<stdio.h> int x=500; //外部定义变量与初始化 void f1() { x+=100; printf(“x=%d\n”,x); } void f2() { int x=10; //局部变量定义与初始化 printf(“x=%d\n”,x); } int main() { int x=300;//局部...

狮子座的男孩 973

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

全局变量

C语言提供了全局变量的定义,全局变量也称为:外部变量。全局变量就是定义在函数外的变量。它不属于大括号{}包含的某个代码块,所以,它的作用域不是在某个代码块内,是在整个源程序中。所以,可以在源程序中任何地方访问全局变量。 由于全局变量是属于整个源程序,所以,它的生命周期也是整个程序的生命周期。那么,只要程序运行没有结束,全局变量的生命周期就不会结束。 所以,在整个程序运行的过程中,都可以使用全局变量。 如下是一个程序测试例子: 程序运行结果如下: 可以看到,我们在函数外面定义了全..

LC的专栏 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c/c++语言面试题目整理

c语言面试题目整理

kyrie_sakura的博客 3214

C++形参、实参地址,局部变量、全局变量指针理解

来源:算法竞赛经典第二版P122 函数**(包括main函数)的形参和在该函数里定 义的变量都被称为该函数的局部变量**(local variable)。不同函数的局部变量相互独 立,即 无法访问其他函数的局部变量。需要注意的是,局部变量的存储空间是临时分配的,函数执 行完毕时,局部变量的空间将被释放,其中的值无法保留到下次使用。与此对应的是全局变 量(global variable):此变量在函数外声明,可以在任何时候,由任何函数访问。需要注意 的是,应该谨慎使用全局变量。(**注意:**若定义一个数组,

Alla 1517

局部变量屏蔽全局变量

本文探讨了局部变量与全局变量同名时的访问问题。在C++中,局部变量会屏蔽同名的全局变量,但可通过作用域解析运算符(::)访问全局变量。而在C语言中,尝试用extern关键字访问被屏蔽的全局变量时,发现VS环境下仍输出局部变量,而CSDN环境下却输出了全局变量,这表明不同编译器对extern的处理可能存在差异。文章揭示了变量作用域优先级规则:局部变量始终优先于全局变量,但某些环境下extern可能突破这种屏蔽。最后提出了不同编译器行为差异的问题,期待技术解释。

ZLH130115的博客 405

static变量与全局、局部变量的区别

java之static变量与全局、局部变量的区别 static变量与全局、局部变量的区别   全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件

evilcry2013的博客 2081

c语言在线答疑,C语言程序设计问题答疑材料(辅导老

《C语言程序设计问题答疑材料(辅导老》由会员分享,可在线阅读,更多相关《C语言程序设计问题答疑材料(辅导老(5页珍藏版)》请在人人文库网上搜索。1、问题答疑材料 1、 字符串“China在内存中占用几个字节? 4、 答:一个字符占一个字节,另外在字符串结尾处系统补了一个0表示字符串 结束,它也占一个字节,加上 5个字符,所以字符串“China在内存中占用6 个字节。 2、 int a22=1,2,...

weixin_32515143的博客 2029

C语言面试题小练——第8天:static的作用、全局变量与局部变量的存储空间、宏定义注意点

1. static有什么作用(至少两种)—— 2. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?—— 3. 写一个宏,返回两个参数中较小的一个

Super辉sir的博客 886

C++知识——1、C/C++程序基础

1、写出代码输出的题可能会遇到: 1)y==z:判断; 2)y | z:转为二进制,按位或运算; 3)y &amp;amp;amp; z:转为二进制,按位与运算; 4)“::”是“域操作符”,如 int value=0; { ::value=2; //此处的value本是局部变量,但有::,所以value成为全局变量。 } 5)注意值的传递性,如 int main(void) { int i...

李骁睿写技术的地方 274

C语言旅途之外部引用变量和局部变量之间的联系

Ⅰ、简单的入门: ①、//代码摘下直接可以运行 //外部引用变量与局部变量 #include<stdio.h>//外部变量引用时优先级没有局部变量的高,且外部变量引用法只是一种来引用外部定义变量的方法; extern int a; //外部变量说明 void s() { int a=100; //局部变量定义及初始化 ++a; printf("%d\n",a); } int ...

狮子座的男孩 793

避免程序崩溃的关键一步:精准控制全局变量构造函数调用顺序

掌握C语言全局变量的构造函数顺序,有效避免程序启动时的未定义行为。适用于跨文件依赖初始化场景,通过合理设计构造函数调用顺序确保对象正确构建,提升程序稳定性与可维护性,值得收藏。

InitPulse的博客 918

C/C++笔试题(二)

1.ASSERT()与assert() ASSERT()是一个调试程序时经常使用的宏,只能在debug模式下使用,在release下会被忽略 assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。 2.请问C++的类和C里面的struct有什么区别? c++中的类具有成员保护功能,并且具有继承,多态这

165
上一篇: 基本赋值运算符的使用—C/C++程序基础(一)
下一篇: i++(前缀式自增)与++i(后缀式自增)的区别与效率比对—C/C++程序基础(三)
恋蛩音
博客等级 码龄12年 97粉丝 303原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值