C语言学习笔记:作用域规则

✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~

✍️ 作者简介: 一个热爱大数据的学习者

✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!

目录

局部变量

全局变量  

全局变量与局部变量的区别

形参

实参


任何一种编程中,程序中定义的变量超出所存在的作用域,变量就不能被访问。

C语言中有三个地方可以声明变量:
    在函数或块内部的局部变量
    在所有函数外部的全局变量
    在形式参数的函数参数定义中

局部变量:
    在程序中使用的变量都定义在函数的内部,它们的使用范围都仅限本函数内,因此主调函数只有通过参数传递,才能将实参数据传递给函数使用,同样,形参的改变也不会影响到实参变量。变量这样使用确保了各函数之间的独立性,避免了函数之间相互干扰。
全局变量:
    一般情况下把全局变量放在程序的最前面,即第一个函数的前面。
由于全局变量和局部变量得作用范围不同允许他们同名,在某段函数内局部变量和全局变量同名时,局部变量生效,全局变量不生效。

局部变量

在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。
#include <stdio.h>
 int main ()
{
  int a, b, c;/* 局部变量声明 */
  return 0;
}

局部变量定义的位置:
函数的开头;在本句以下的函数内有效;
函数内的复合语句内定义;只能在本复合语句内切本行以下有效;
形式参数:只在此函数有效;
函数中间(非开头);只能在本行以下有效;

全局变量  

全局变量是定义在函数外部的,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,全局变量可以被任何函数访问。
#include <stdio.h>
 int g;/* 全局变量声明 */
 int main ()
{
  int a, b, c;/* 局部变量声明 */
  return 0;
}

全局变量定义的位置:
文件开头:在此行以下的所有定义的函数都有效;
函数后和函数前:全局变量在此行之前是无效,在此行之后有效;
文件结尾:程序结尾的全局变量是没有意义的;

全局变量与局部变量的区别

全局变量保存在内存的全局存储区中,占用静态的存储单元;
局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
定义局部变量时,系统不会对其初始化。定义全局变量时,系统会自动对其初始化

局部变量的有效作用范围局限于所在的函数内部,形参就是局部变量,使用局部变量可以避免各个函数之间变量的相互干扰,保证了函数的独立性。
全局变量的作用范围是从定义开始到程序所有文件的结束,他对作用范围内的所有函数都起作用。
一般情况下全局变量定义在程序的第一个函数前面。
当函数内的局部变量和全局变量同名时,在该函数内全局变量不起作用。
局部变量可以是程序具有很好的独立性,全局变量可以解决多结果返回的问题,但是全局变量的大量使用会违反程序设计时要求函数的“内聚性”强,函数与函数之间“耦合性”弱。因此一般情况下,应尽量使用局部变量和函数参数。

形参

形参,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用
#include <stdio.h>
 int g;/* 全局变量声明 */
 int sum(int  c ,int b);
 int main (){
  int a, b, c;/* 局部变量声明 */
  c = sum( a, b);//传参,实际参数
  return 0;
}
int sum(int c ,int d){
    

实参

形参只是声明了参数的变量,并未直接进行赋值使用,而实际参数则相反。
#include <stdio.h>
int test(int,int); // 形参,只声明
int main(){
    int a,b;
    printf("%d",test(5,3)); // 实参,已赋值
}
int test(int a,int b){ // 形参
    a=a+b;
    return a;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烟雨孤舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值