☀️光天化日学C语言☀️(35)- 局部变量和全局变量

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️光天化日学C语言☀️(35)- 局部变量和全局变量相关的知识,希望对你有一定的参考价值。

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。这个系列文章主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  这一章的主要内容是函数。

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、作用域

  所谓作用域,就是变量能够有效作用的范围。

四、局部变量

1、局部变量的定义

  局部变量(Local Variable),即定义在函数内部的变量,它的作用域仅限于该函数内部,离开函数即无效。例如:

#include <stdio.h>

int Power(int x) {
    int y = x * x;     // (1)
    return y;
}

int main() {
    int z;
    z = Power(6);      // (2)
    printf("%d\\n", z);
    return 0;
}
  • ( 1 ) (1) (1) y y y 作为Power(int x)函数的局部变量,只在Power(int x)函数内部有效;
  • ( 2 ) (2) (2) z z z 作为main()函数的局部变量,只在main()函数内部有效,

  从上面这段代码中,我们看到Power(int x)这个函数,其实是有两个局部变量的,一个是函数的形参 x x x,一个是函数内部定义的变量 y y y,如果在main()函数中用了 y y y,就会报编译错误。

2、不同函数中的同名局部变量

  当两个函数中定义了同名的局部变量,它们之间是毫无关系的,简单的认为,它们是存储在不同的内存空间,仅仅名字相同而已,例如:

#include <stdio.h>

int Power(int x) {
    int y = x * x;     // (1)
    return y;
}

int main() {
    int y;
    y = Power(6);      // (2)
    printf("%d\\n", y);
    return 0;
}

  • ( 1 ) (1) (1) ( 2 ) (2) (2) y y y 不同,修改任何一个,另一个都不会改变。

3、不同语句块中的同名局部变量

  在同一个函数中,是否允许定义同名变量呢?
  答案是肯定的,我们可以将这两个变量定义在不同的语句块中,这样就实现了同一个函数定义同名局部变量的需求,例如:

#include <stdio.h>

int main() {
    {
        int y = 1;
        printf("%d\\n", y);
    }
    {
        int y = 2;
        printf("%d\\n", y);
    }
    return 0;
}
  • 其中{}中的内容,代表了一个语句块。这里的两个 y y y 是两个不同的变量。

五、全局变量

1、全局变量的定义

  全局变量(Global Variable),即定义在所有函数(包括main函数)外部的变量,它的作用域默认是整个程序。例如:

#include <stdio.h>
int X = 0;

int getGlobalX() {
    return X;
}

int main() {
    ++X;
    printf("%d\\n", X);
    return 0;
} 

  这个程序中,程序的输出为 1, X X X 作为全局变量,可以给getGlobalX()main()这两个函数使用,值的改变会影响全局。

2、全局变量的定义位置

  虽然全局变量可以定义在函数外部,但是C语言代码的执行顺序是从上到下的, X X X 这个全局变量的定义必须在使用它的函数之前,如下这个例子就不会通过编译。

#include <stdio.h>

int getGlobalX() {
    return X;          // (1)
}
int X = 0;            

int main() {
    printf("%d\\n", getGlobalX());
    return 0;
} 
  • ( 1 ) (1) (1) 由于 X X X 的定义在使用之后,程序识别这个时候是没有 X X X 这个变量,所以这里会产生编译错误。

六、全局变量和局部变量的应用

1、就近原则

  就近原则指的是:当代码中定义了相同名字的全局变量和局部变量时,在局部范围内,全局变量是会被屏蔽的,也就是以局部变量优先。

#include <stdio.h>
int X = 1; 

void PrintX() {
    int X = 2;
    printf("%d\\n", X);
}

int main() {
    PrintX(); 
    return 0;
} 
  • 如上代码所示,PrintX函数内部打印的变量X是函数内部的局部变量,而不是外部的全局变量。

通过这一章,我们学会了:
   1)局部变量;
   2)全局变量;

  • 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

课后习题


🔥让天下没有难学的算法🔥

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

入门级C语言真题汇总
🧡《C语言入门100例》🧡

几张动图学会一种数据结构
🌳《画解数据结构》🌳

组团学习,抱团生长
🌌《算法入门指引》🌌

竞赛选手金典图文教程
💜《夜深人静写算法》💜

以上是关于☀️光天化日学C语言☀️(35)- 局部变量和全局变量的主要内容,如果未能解决你的问题,请参考以下文章

☀️光天化日学C语言☀️(34)- 函数进阶 | 面向过程编程

☀️光天化日学C语言☀️(33)- 函数入门 | 开启下一个篇章!

☀️光天化日学C语言☀️(32)- continue 关键字 | 下一个!

☀️光天化日学C语言☀️(29)- while 语句 | 死循环啦!

☀️光天化日学C语言☀️(31)- break 关键字 | 当断则断!

☀️光天化日学C语言☀️(30)- for 语句 | 子子孙孙无穷尽也