C 作用域规则

C 作用域规则详解

在 C 语言中,变量的作用域指的是变量可以被访问的范围。C 语言定义了几种作用域,其中包括块作用域、函数作用域、文件作用域和函数形参作用域等。本文将详细介绍 C 作用域规则以及示例说明。

1. 块作用域

块作用域是指只能在定义变量的块或函数内使用变量的作用域。块作用域中定义的变量通常称为局部变量。

1.1. 示例 1

#include <stdio.h>

int main() {
    int x = 1;
    {
        int x = 2;
        printf("x in block = %d\n", x);
    }
    printf("x in main function = %d\n", x);

    return 0;
}

上面的示例中,我们在 main 函数内定义了一个 x 变量,并在一个块中定义了另一个 x 变量。我们在块中打印变量 x,输出结果为 2,该结果是因为我们使用了块作用域中的 x 变量。接着我们在 main 函数中打印 x 变量,输出结果为 1,这是因为我们使用了 main 函数作用域中的 x 变量。

1.2. 示例 2

#include <stdio.h>

int main() {
    int x = 1;
    if (x == 1) {
        int x = 2;
        printf("x in if statement = %d\n", x);
    }
    printf("x in main function = %d\n", x);

    return 0;
}

在示例 2 中,我们定义了一个 x 变量,在 if 语句块中又定义了一个同名的 x 变量。我们在 if 块中打印变量 x,输出结果为 2,因为这里使用的是 if 块作用域中的 x 变量。接着在 main 函数中打印 x 变量,输出结果为 1,因为我们使用的是 main 函数作用域中的 x 变量。这里需要注意的是,x 的值是在 if 语句块之外被定义的,如果 if 块中没有定义 x 变量,那么 if 块中将使用 x 变量的外部定义。

2. 函数作用域

函数作用域是指函数内定义的变量只能在函数内部使用,函数外无法访问。

2.1. 示例 1

#include <stdio.h>

void foo() {
    int x = 2;
    printf("x in function foo = %d\n", x);
}

int main() {
    foo();
    return 0;
}

在示例 1 中,我们在函数 foo 中定义了一个 x 变量,只能在函数内部使用。我们在 foo 函数中打印变量 x,输出结果为 2。

2.2. 示例 2

#include <stdio.h>

int x = 1;

void foo() {
    printf("x in function foo = %d\n", x);
}

int main() {
    foo();
    printf("x in main function = %d\n", x);
    return 0;
}

在示例 2 中,我们在全局范围内定义了一个 x 变量,它的作用域是整个程序。接着,在函数 foo 中我们使用了这个全局变量 x,输出结果为 1。在 main 函数中我们同样使用了全局变量 x,输出结果也是 1。这是因为在函数foo中使用的变量x是全局变量,因此无论在函数foo还是在main函数中,输出的都是全局变量x的值。

3. 文件作用域

文件作用域是指在文件内部定义的变量可以被该文件内的所有函数使用。

3.1. 示例 1

#include <stdio.h>

static int x = 2;
void foo() {
    printf("x in function foo = %d\n", x);
}

int main() {
    foo();
    printf("x in main function = %d\n", x);
    return 0;
}

在示例 3.1 中,我们在文件作用域内定义了一个静态变量 x,我们在函数foo和main函数中都能使用这个变量。需要注意的是,静态变量的作用域有时候也称为程序作用域,因为在整个程序中都可以使用它们。在函数 foo 中打印变量 x 输出结果是 2,跟在 main 函数中打印变量 x 输出结果也是 2,因为两个函数中使用的都是同一个文件作用域的 x 变量。

4. 函数形参作用域

函数形参作用域在函数内部。形参作用域中定义的变量只能在函数内部使用。

4.1. 示例 1

#include <stdio.h>

void foo(int x) {
    printf("x in function foo = %d\n", x);
}

int main() {
    foo(2);
    return 0;
}

在示例 4.1 中,函数 foo 的形参 x 在函数 foo 内部起作用。我们在调用函数 foo 时传递了 2 作为实参,函数内部打印变量 x 输出结果是 2。

结论

在 C 语言中,变量的作用域决定了该变量能否被访问,作用域也可以看成是变量在程序中的“有效范围”,变量的生命周期到底有多长,也决定了对变量进行操作的有效性。熟练掌握 C 作用域规则,可以帮助我们更好的使用 C 语言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 作用域规则 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • PHP序列化的四种实现方法与横向对比

    PHP序列化的四种实现方法与横向对比 什么是PHP序列化 PHP序列化是指将PHP变量转换为可存储或可传输的格式。可以将序列化后的数据存储到文件或数据库中,也可以通过网络传输到其他设备。PHP反序列化是指将序列化后的数据重新转换为原来的PHP变量,从而实现数据的处理和传递。 四种PHP序列化的实现方法 serialize()和unserialize() se…

    C 2023年5月23日
    00
  • 教你用c++从头开始实现决策树

    教你用c++从头开始实现决策树 决策树介绍 决策树是一种树形结构,它可以用于分类和回归分析。在这个树结构中,叶子节点表示分类或回归结果,而其他结点表示基于属性值对数据集进行分割的条件。决策树可以理解为一个类似流程图的结构,在这个流程图中,每次判断输入数据的属性值,然后根据属性值分支到不同的子结点,直到达到某个叶子结点得到分类或回归结果。 构建决策树的过程 决…

    C 2023年5月22日
    00
  • java 出现NullPointerException的原因及解决办法

    Java出现空指针异常(NullPointerException)的原因及解决办法 在Java编程中,空指针异常是一种常见的错误类型。它通常发生在一个对象上,当试图对一个为null的对象进行操作时,就会抛出空指针异常。本文将分析空指针异常的原因,并给出解决办法。 原因 空指针异常通常发生在以下情况: 操作为null的对象 String str = null;…

    C 2023年5月23日
    00
  • 深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

    JSON.parse()的作用分析: JSON.parse()是将JSON格式的字符串解析成一个Javascript对象的方法。具体来讲,JSON.parse()将一个json格式的字符串转换为其对应的Javascript对象。 例如,假设我们有一个json数据如下: let jsonString = ‘{"id":1, "na…

    C 2023年5月23日
    00
  • C语言简明讲解操作符++和–的使用方法

    C语言简明讲解操作符++和–的使用方法 操作符++和–的基本概念 操作符++和–是C语言中的两种自增、自减操作符。它们作用于一个变量,可以将该变量的值自增1或自减1。 操作符++:将变量的值自增1,等同于var = var + 1。 操作符–:将变量的值自减1,等同于var = var – 1。 这两个操作符都可以在变量前面或后面使用,从而分别产生前…

    C 2023年5月23日
    00
  • PHP使用JSON和将json还原成数组

    关于PHP使用JSON和将JSON还原成数组的攻略,可以分为以下几个步骤: 1. PHP使用JSON 1.1 创建JSON字符串 在PHP中使用json_encode()函数可以将数组转换为JSON格式的字符串。例如: $array = array( ‘name’ => ‘Tom’, ‘age’ => 25, ‘sex’ => ‘male’…

    C 2023年5月23日
    00
  • java 实现黄金分割数的示例详解

    Java 实现黄金分割数的示例详解 什么是黄金分割数 黄金分割数又称黄金比例,是一种在数学、美术及建筑等领域中广泛存在的比例关系。黄金分割比例是指将一条线段分成两条部分,使其中一条部分与全长之比等于另一条部分与这条部分之比。 数学上,黄金分割比例为 (根号5-1)/2,约等于 0.6180339887。 如何实现黄金分割数 在 Java 中,可以使用以下代码…

    C 2023年5月22日
    00
  • 逍遥自在学C语言 | 条件控制的正确使用姿势

    前言 在C语言中,有三种条件判断结构:if语句、if-else语句和switch语句。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、if语句 基本语法 if (条件) { // 代码块1 } 代码示例 #include <stdio.h> int mai…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部