零基础C语言:第十一讲(局部变量与全局变量)

266 阅读2分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

局部变量

  • 局部变量

    • 不同函数之间定义的变量无法相互访问(main函数与其他定义的函数之间或其他定义的函数相互之间)
    • 同一个函数内定义相同名称的变量也不一定相互影响(如复合语句中和函数中均定义)

      • 举例
      • 结果
      • 注意

        • 复合语句:例如for语句中和函数内都定义了相同的变量,for语句中的变量会屏蔽函数内的变量。这样就允许变量的使用的时候定义更为方便。
        • 如果相同的域内同时定义多个相同名称的变量则编译器会报错

全局变量

  • 全局变量

    • 在函数里边定义的,叫做局部变量;在函数外边定义的,叫做外部变量,也叫全局变量。
    • 有时候,可能需要在多个函数中使用共同的一个变量,那么就会用到全局变量。因为全局变量可以被程序中的其他函数所共用。
    • 与局部变量不同,如果不对全局变量进行初始化,那么会自动初始化为0;(局部变量不初始化会出现警告)

      • 举例(多个函数对全局变量进行操作)
      • 结果
    • 如果在函数的内部存在一个与全局变量同名的局部变量,编译器不会报错,而是在函数中屏蔽全局变量(也就是说在这个函数中,全局变量不起作用,优先使用作用域更小的变量)。

      • 举例
      • 结果
  • extern关键字

    • 用extern关键字告诉编译器:这个变量在后边定义了,先别报错。
    • 举例(此处应该是extern int count,下面的写法会出现警告)
    • 结果
  • 注意:不要大量使用全局变量

    • 使用全局变量会使程序占用更多的内存,因为全局变量从被定义的时候开始,直到程序退出才被释放。
    • 污染命名空间,虽然局部变量会屏蔽全局变量,但这样一来也会降低程序的可读性,很难一下子判断出每个变量的含义和作用范围。
    • 提高代码的耦合性,牵一发而动全身,时间久了,代码长了,都不知道全局变量被哪些函数修改过。