块作用域和文件作用域(2)

2024-08-29 04:44
文章标签 作用域

本文主要是介绍块作用域和文件作用域(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3.1.代码块可以嵌套

#include <stdio.h>
void test()
{
int num=0;//test函数内部就是一个块作用域
}
int main()
{
int a=12;
if(a==12)
{
int b=99;
printf("%d %d\n",a,b);//12 99
}
printf("%d\n",a);//12
printf("%d\n",b);//出错
return 0;
}

上面例子中,变量b是if代码块里面声明的,所以对于大括号外面的代码,这个变量是不存在的。

代码块可以嵌套,即代码块内部还有代码块,这是就形成了多层的块作用域。

规则是:内层代码块可以使用外层声明的变量,但外层不可以使用内层声明的变量。如果内层的变量与外层同名,那么会在当前作用域覆盖外层变量。(简单来说外面的不可以使用里面的变量,里面的可以使用外面的变量,当同一个名称的变量内容不想同时里边的变量会自行覆盖当前作用域。

3.2.局部优先

#include <stdio.h>int main()
{
int i=12;
{
int i=24;
printf("%d\n",i);//24
}
printf("%d\n",i);//12
return 0;
}

上面示例中,内层和外层都有一个变量i,每个作用于都会优先使用当前作用域声明的变量i。

3.3.for循环也是块作用域

最常见的块作用域就是函数,函数内部声明的变量,对于函数外部是不可见的。for循环也是一个块作用域,循环变量只对循环体内部可见,外部是不可见的。

1 for(int i=0;i<10;i++)

2 printf("%d\n",i);

3printf("%d\n",i);//出错

上面示例中,for循环省略了大括号,但依然是一个块作用域,在外部读取循环变量i,编译器就会报错。

程序块和块作用域的了解,让我们写程序的时候有了边界,有些变量可以使用,有些变量我们则没有权限。

4.文件作用域

文件作用域(file scope)指的是在函数外部声明的变量(全局变量),从声明的位置到文件结束都有效的,通俗的讲就是全局变量是具有文件作用域的。

1 #include <stdio.h>

2 int x=1;//全局变量

3 int main(void)

4 {

5 printf("%i\n",x);

6 } 

上面示例中,变量x是所有函数外定义的变量,是全局变量,从声明的位置开始的整个当前文件都是它的作用域,可以在这个范围的任何地方读取这个变量,比如main()函数内部就可以读取这个变量。

全局变量就是具有文件作用域的

甚至全局变量,在其他源文件内部也是可以使用的。


这篇关于块作用域和文件作用域(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116881

相关文章

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

js私有作用域(function(){})(); 模仿块级作用域

摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: for(var i=0;i<10;i++){alert(i);}alert(i); for循环后的i,在其它语言像c、java中,会在for结束后被销毁,但js在后续的操作中仍然能访

C语言作用域

作用域 (scope) 是描述程序可以访问标识符的区域。         一个标识符可以有块作用域、函数作用域、函数原型作用域、文件作用域和全局作用域。 1. 块作用域 (block scope)         块是一对花括号 {} 括起来的区域 或 函数体内任意复合语句定义范围内的区域。         定义在块中的变量具有块作用域。块作用域的变量的可见范围从定义处开始

大话C++:第6篇 命名空间namespace作用域

1 命名空间概述 在一个大型的软件项目中,可能会有许多不同的代码文件,这些文件可能由不同的开发者编写,或者来自不同的库和模块。如果这些代码文件中存在同名的变量、函数、类或其他标识符,那么在编译或运行时就可能发生命名冲突,导致程序无法正确执行。 通过使用命名空间(namespace),开发者可以将相关的代码、变量、函数等组织在一起,形成一个独立的命名空间。这样,即使不同的代码片段中使用了相同的标

Rust的常数、作用域与所有权

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一  -CSDN博客 Rust到底值不值得学,之二-CSDN博客 Rust的数据类型-CSDN博客 3.7  常数的数据类型 在Rust语言中,变量有类型,常量也有类型。我们知道,在定义const常量的时候,就要

【C++】如何用C++创建对象,理解作用域、堆栈、内存分配

九、如何用C++创建对象,理解作用域、堆栈、内存分配 本部分讨论如何用C++创建对象。建议先看【C++】C++中的关键字:const、mutable、auto、new....-CSDN博客 中的关键字new、delete,方便本篇的理解。 C++是对内存管控最强的一门编程语言。 当我们写完一个类,如果这个类不是完全静态的(我们现在不讨论这种情况),那接下来就该实例化这个类来创建对象了。此时就

PHP 变量作用域

PHP 有四种不同的变量作用域: localglobalstaticparameter 局部和全局作用域 在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。 在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问: 实例: <?php$x=5; // 全局变量funct

JavaScript学习(四):JavaScript类型转换以及变量作用域

3.8 类型转换 JavaScript中的取值类型非常灵活,从布尔值可以看到这一点:当JavaScript期望使用一个布尔值的时候,可以提供任何值,JavaScript将根据需要自行转换类型,真值转换成true,假值转换成false 3.8.1 转换和相等性 因为JavaScript可以做灵活的类型转换,因此“=="相等运算符也随相等的

【C++】【日志贴】浅谈标准库类型string、vector及C风格字符串在全局和局部作用域中默认初始值情况

平时练习发现这个问题,记录一下。 C风格字符串在全局和局部作用域中初始值情况【空字符+未定义的字符】由于内存没有初始化造成的对于栈,内存如果没有初始化,则会出现“烫烫烫烫烫烫”;对于堆,内存如果没有初始化,则会出现“屯屯屯屯屯”;有时候数组没有结束符,输出数组也会有这些汉字的出现,就是因为没有结束符占用了后面的空闲的内存块即没有初始化的内存块 标准库类型string

Go-作用域

示例:全局变量、局部变量 package mainimport "fmt"var x intfunc print(x int) {fmt.Println("x = ", x)}func foo() {x = 100 // global variable 'x'}func bar() {x := 200 // local variable 'x'print(x)}/*D:\examples