图片[1]yxqzC中的作用域规则yxqz小余塘

作者:余小小

日期:2021-10-02

作用域概念

  • 作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问

声明变量的三个区域

  1. 在函数或块内部的局部变量

  2. 在所有函数外部的全局变量

  3. 形式参数的函数参数定义中

局部变量

  • 某个函数或块的内部声明的变量称为局部变量

  • 只能被该函数或该代码块内部的语句使用

  • 局部变量在函数外部是不可知的。

  • 局部变量被定义时,系统不会对其初始化,必须自行对其初始化。才能使用。

#include <stdio.h>

int main ()
{
 /* 局部变量声明 */
 int a, b;
 int c;

 /* 实际初始化 */
 a = 10;
 b = 20;
 c = a + b;

 printf ("value of a = %d, b = %d and c = %d\n", a, b, c);

 return 0;
}

 

全局变量

  • 全局变量是定义在函数外部,通常是在程序的顶部。

  • 全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量

  • 全局变量可以被任何函数访问。

  • c语言没有垃圾回收器,所以结束程序就才会被消除

  • 定义全局变量时,系统会自动对其初始化

#include <stdio.h>

/* 全局变量声明 */
int g;

int main ()
{
 /* 局部变量声明 */
 int a, b;

 /* 实际初始化 */
 a = 10;
 b = 20;
 g = a + b;

 printf ("value of a = %d, b = %d and g = %d\n", a, b, g);

 return 0;
}

 

局部变量和全局变量的名称可以相同

当局部变量和全局变量的名称相同的时候,在函数内,会使用局部变量值,全局变量不会被使用。(就近原则)

 

#include <stdio.h>

/* 全局变量声明 */
int g = 20;

int main ()
{
 /* 局部变量声明 */
 int g = 10;

 printf ("value of g = %d\n",  g);

 return 0;
}

 

形式参数

  • 函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。

  • 在定义函数中制定的形参,在没有出现函数调用时不占用内存中的存储单元。在函数调用时才分配内存

#include <stdio.h>

/* 全局变量声明 */
int a = 20;

int main ()
{
 /* 在主函数中的局部变量声明 */
 int a = 10;
 int b = 20;
 int c = 0;
 int sum(int, int);

 printf ("value of a in main() = %d\n",  a);
 c = sum( a, b);
 printf ("value of c in main() = %d\n",  c);

 return 0;
}

/* 添加两个整数的函数 */
int sum(int a, int b)
{
   printf ("value of a in sum() = %d\n",  a);
   printf ("value of b in sum() = %d\n",  b);

   return a + b;
}

 

实际参数

调用函数的时候,传入的 值(实参可以是变量,变量与表达式)

值传递

将实参的值传递给形参,是一个具体的值

址传递

传入的是一个地址 ,比如数组名

 

全局变量与局部变量在内存中的区别

  • 全局变量保存在内存的全局存储区中,占用静态的存储单元;

  • 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

常用基本数据类型的默认值

数据类型 初始化默认值
int 0
char ‘\0’
float 0
double 0
pointer NULL

正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值。

文章版权声明 1、本网站名称:小余塘
2、本站永久网址:https://www.yxqz.top/
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ2457431511进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容