当局部变量遇上全局变量——extern及花括号用法举例

请阅读以下代码并说出它的输出结果。

 1 #include <stdio.h>
 2
 3 int val = 9;
 4
 5 int foo()
 6 {
 7     int val = 2;
 8     {
 9         extern int val;
10         printf("val_foo = %d\n", val);
11     }
12     return val;
13 }
14
15 int main()
16 {
17     int val = 0;
18     printf("val_main1 = %d\n", val);
19     val = foo();
20     printf("val_main2 = %d\n", val);
21     system("pause");
22     return val;
23 }

在Dev-C++下编译后运行,输出结果如下:

val_main1 = 0
val_foo = 9
val_main2 = 2
请按任意键继续. . .

结论:

1. 当局部变量和全局变量名称相同,如果未作外部变量声明,在代码块中局部变量起作用。

2. 当使用extern声明为外部变量,需要用花括号使声明和引用位于同一个代码块,此时全局变量才起作用。

时间: 2024-08-27 08:29:23

当局部变量遇上全局变量——extern及花括号用法举例的相关文章

IOS总结 静变量static、全局变量extern、局部变量、实例变量

1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用static. 静态变量的优点:1.节省内存.静态变量只存储一处,但供所有对象使用. 2.它的值是可以更新的. 3.可提高时间效率.只要某个对象对静态变量更新一次,所有的对象都能访问更新后的值. 2.全局变量extern 什么是全局变量:也称之为外部变量,是在方法外部定义的变量.它不属于哪个方法,而是

C/C++语言变量问题(全局变量、局部变量、静态全局变量、静态局部变量)

1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的

全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别

一.程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变

C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而

初识genymotion安装遇上的VirtualBox问题

想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了genymotion这个模拟器,Genymotion依赖于VirtualBox(著名的开源虚拟机软件,轻巧.好用!),就是说Genymotion跟VirtualBox要一起使用(Genymotion调用了VirtualBox的接口). 在安装过程中总是遇上这样那样的问题,这不刚好遇上了. 1.先码图看

python :列表 字典 集合 类 ----局部变量可以改全局变量

#列表 字典 集合 类 ----局部变量可以改全局变量,除了整数和字符串 names=["alex","jack","luck"] def func(names): names[0]='金角大王' print("inside name:" ,names) func(names) print (names) #字符串 name='jack' name1=name name='jack_chen' print(name,name1

当css遇上less

某种程度来讲,css不能称得上程序.虽然它也和其它语言一样,有自己的规范,也需要编码,但它的笨拙实在让我失望.不喜欢css是因为无论怎么优化代码,项目大到一定程序后,都会看上去一团乱.而且有时候一个bug的定位也要花去不少时间.直到我发现了less.突然感慨,css中的jquery大概就是它了. less允许传参数,允许定义变量,可以把层叠的样式组织得较为美观,可以少写许多重复代码--这一切的优势,让我毫不犹豫地要去把它加入接下来的项目. 举个例子: css要这样写: #header h1 {

当VB遇上C++

最近在学习VB.NET 这块的东西,自然而然就会想到VB.NET与VB6是什么关系? 宏观上来讲就是从基于对象变成了完全的面向对象,因此不能简单的说VB.NET是VB6.0的升级版本.在学习VB.NET之前,已经接触过C++和VB,所以在学习VB.NET的时候总能看到他们的影子,那种似曾相识的感觉让我不得不仰天长叹:这VB.NET简直就是混搭版本的程序设计语言啊! 在1991年Visual Basic1.0诞生以前,开发人员不得不使用C++和Windows系统本身的未成形的程序块,即所谓的Win

渗透场景篇--当XSS遇上CSRF

你是否有过这样的经历,你发现了一个xss,但是貌似只能叉自己,输出点只有自己可以看见.这个时候,你会觉得这个xss很鸡肋,当你就此忽略这个漏洞的时候,你可能丢掉一个发出组合技能的机会.    今天我们来介绍一个场景,当xss遇上csrf的时候,是否能打出一套漂亮的组合技能. 实验环境:     ZvulDirll[请用下面我简单修改过的版本]     下载地址:在文章最后面 一.安装:0x00:解压ZVulDrill压缩包,将其放在www目录下,也就是你的网站根目录.0x01.编辑ZVulDri