【新手解答7】深入探索 C 语言:代码缩进 + 变量作用域、静态变量 + 变量名和函数名重名

写在最前面

一位粉丝私信交流,回想起了当初的我C语言一题写一下午的,而且很多概念糊糊的不清楚。借助这次机会,整理了相关 C 语言中最常见而关键的疑惑,并对概念进行解答。

本篇博客的前身:
【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库
【新手解答2】深入探索 C 语言:变量名、变量 + 函数声明 vs 函数定义 + main的声明 + 头文件和源文件的关系
【新手解答3】深入探索 C 语言:头文件提供必要的接口、源文件保持实现细节的私有性 + 进一步学习的方向 + 如何快速编写程序并最终能制作小游戏
【新手解答4】深入探索 C 语言:全局变量声明、全局函数声明 + 宏定义
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + switch-case 与多项条件和枚举的差别
【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于namespace + import vs include

如有不对的地方欢迎指出!好久没接触C了hh

问题一:代码缩进

【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于namespace + import vs include提到的实例中,这每行之前的空格又有什么讲究呢?
我发现在int main后面,跟的代码块必须与main平齐,而这个显然是空了四格,那有没有什么普遍点的规律?

switch (expression) {
    case value1:
        // 代码块
        break;
    case value2:
        // 代码块
        break;
    // 更多 cases...
    default:
        // 默认代码块
}

问题二:C语言中的变量作用域

对了,C语言中的前缀指的是public那类的吗?还有可否细说一下变量作用域?

在 C 语言中,“前缀” 并不像在一些其他语言(如 Java 或 C#)中那样指代访问修饰符(如 publicprivate 等)。C 语言作为一种过程式编程语言,并没有内置类和访问修饰符的概念。
在 C 语言中,提到的“前缀”通常是指变量或函数名之前的一段标识性文本,用于区分不同模块或库中的同名变量或函数。

变量作用域

在 C 语言中,变量的作用域决定了在哪个部分的代码中可以访问该变量。主要有两种类型的作用域:

  1. 局部作用域

    • 局部变量在函数或块(大括号 {} 内)中声明。
    • 它们只能在声明它们的函数或块中被访问和修改。
    • 每次调用函数时,都会为局部变量分配内存,并在函数执行完毕时释放。
    void function() {
        int localVar = 5; // 局部变量,仅在 function 内部可见
    }
    
  2. 全局作用域

    • 全局变量在所有函数之外声明,通常在文件的顶部。
    • 它们在整个程序中都是有效的,可以被任何函数访问和修改。
    • 全局变量在程序开始执行时分配内存,并在程序结束时释放。
    int globalVar = 10; // 全局变量,整个程序中都可见
    
    void function() {
        globalVar = 15; // 可以访问和修改全局变量
    }
    

静态变量

静态变量(使用 static 关键字声明)是一种特殊类型的变量,它结合了局部变量和全局变量的某些特性:

  • 静态局部变量:在函数内部声明,但它的生命周期贯穿整个程序执行期间。它只在第一次调用函数时初始化,并在随后的函数调用中保持其值。
  • 静态全局变量:在所有函数之外声明,但只在定义它的文件内有效。它可以防止变量名在其他文件中被访问,从而提供了一种封装。

总结

  • C 语言中没有类似于 publicprivate 这样的访问修饰符。
  • 变量作用域在 C 语言中非常重要,它定义了变量的可见性和生命周期。
  • 局部变量仅在声明它们的函数或块中有效,而全局变量在整个程序中都有效。
  • 静态变量具有特殊的生命周期和作用域特性。

问题三:变量名和函数名重名

sum好像是数组求和的函数吧,但这里的应用好像并不符合它的调用条件啊
哦,对了sum还有对一组数值求和的操作的意思
等等,这个sum可能是变量?但是这样的话……变量和函数名都是标识符,会不会重名什么的?

实例:计算数组中正数的总和
假设我们有一个整数数组,我们想计算数组中所有正数的总和。

#include <stdio.h>

int main() {
    int numbers[] = { -1, 3, 4, -5, 9, -2 };
    int sum = 0;

    for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++) {
        if (numbers[i] > 0) {
            sum += numbers[i];
        }
    }

    printf("Sum of positive numbers: %d\n", sum);
    return 0;
}

相关解析

【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于namespace + import vs include提到的实例中,sum 实际上是一个变量的名字,而不是函数名。它被用来累加数组中的正数,最终存储正数的总和。

变量 sum

在这段代码中,sum 被初始化为 0。然后,通过 for 循环遍历数组 numbers,每当遇到一个正数时,就将这个数加到 sum 上。这个过程中,sum 变量累积了数组中所有正数的总和。

C 语言中,sum 并不是一个内置的函数名或保留字

在标准的 C 语言中,sum 并不是一个内置的函数名或保留字。C 语言标准库中没有名为 sum 的函数。如果你在 C 代码中看到 sum,它很可能是程序员自定义的一个变量名或者函数名。

C 语言标准库提供了一系列的函数,但都是围绕字符串处理、数学计算、输入输出、时间日期处理等功能。对于求和这样的操作,通常需要程序员自己实现。

例如,在这个的代码示例中,sum 被用作一个变量名,用于累加数组中的正数。这是程序员定义的变量,而不是 C 语言的内置函数。在 C 中,执行求和操作通常需要通过循环或递归等方法来手动计算。

变量名和函数名重名?

在 C 和 C++ 中,变量名和函数名都是标识符。确实有可能出现重名的情况,但在函数和变量的作用域不重叠的情况下,这通常不是问题。

  • 局部作用域:在函数内部定义的变量(如 sum)只在该函数内部有效,这称为局部作用域。

  • 全局作用域:在所有函数外部定义的变量具有全局作用域,它们在整个程序中都是有效的。

  • 函数名:函数名的作用域取决于它的声明位置。通常,函数可以在文件中的任何位置被调用(除非它被声明为 static,这样它就只能在定义它的文件中被调用)。

在这个代码示例中,sum 是一个局部变量,只在 main 函数内部有意义。除非你在同一个作用域内定义了一个名为 sum 的函数,否则不会有重名的问题。

总结

在这个代码实例中,sum 是用来累加正数的一个局部变量。在 C 和 C++ 中,变量名和函数名都是标识符,它们可以同名,但只要它们的作用域不重叠,就不会有冲突。这段代码没有函数名为 sum,因此不会发生重名冲突。


希望这些解释能够帮助你更好地理解这些概念。如果还有疑问,欢迎继续提问交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Yu欸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值