学习C语言第十一天

  C 作用域规则

作用域是程序中定义变量所存在区域超过该区域变量就不能访问。三个地方可声明变量:

  1. 函数或块内部的局部变量
  2. 所有函数外部的全局变量
  3. 形式参数的函数参数定义

局部变量

函数或块的内部声明的变量称为局部变量。只能被该函数或该代码块内部语句使用,函数外部不可知

eg:

#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;
}

变量 a、b 和 c 是 main() 函数的局部变量。

全局变量

定义在函数外部,在程序的顶部。全局变量在整个程序内都有效函数内部能访问全局变量。

可被任何函数访问,声明后,全局变量整个程序中都可用。

eg:

#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;

}

局部变量和全局变量的名称可相同,函数内,名字相同,使用局部变量值,全局变量不使用。

eg:

#include <stdio.h>

/* 全局变量声明 */

int g = 20;

int main ()

{

/* 局部变量声明 */

int g = 10;

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

return 0;

}

value of g = 10

形式参数

函数的参数、形式参数被当作该函数内的局部变量,与全局变量同会被优先使用

eg:

#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;
}

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

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

  • 全局变量保存在内存全局存储区,占静态存储单元;
  • 局部变量保存在,在所在函数被调用时,动态地为变量分配存储单元

初始化局部变量和全局变量

局部变量被定义时,系统不会对其初始化,必须自行对其初始化。定义全局变量时,系统会自动对其初始化。

数据类型初始化默认值
int0
char'\0'
float0
double0
pointerNULL

未初始化的变量会导致一些在内存位置中已经可用的垃圾值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值