作用域

1.作用域:是指标识符的有效范围,变量的有效范围称为变量的作用域,所有的变量都有自己的作用域,作用域的范围由说明方式决定。VC++中作用域可以分为块作用域、文件作用域、函数原型作用域、函数作用域和类作用域。变量主要分为局部变量和全局变量。
块作用域:用一对花括号括起来的一部分程序称为一个块。在块内定义说明的变量,其作用域仅限于块内,离开该块后再使用该变量是非法的。具有块作用域的变量是局部变量。
很多时候块作用域都是在函数内部定义的局部变量。
注意:一个块内不允许定义名称相同的变量,在不同的块中可以定义名称相同的变量。
主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。
形参是属于被调函数的,一定是局部变量。
同一个函数的不同范围(块)内可定义同名的变量,其原则为局部优先。
#include <stdio.h>


void main()
{
int k, i = 2;
k = i+3;
{
int k = 8;
i += 4;
printf("k = %d,i = %d.\n", k,i); //8, 6
}
printf("k = %d,i = %d.\n", k, i); //5, 6
}


在for语句头部定义的变量,其作用域为包含for语句的块,但在循环体中定义的变量,其作用域到循环体体结束。
void main()
{
for(int x = 0; x < 10; x++)
{
int y;
y = x;
printf("y = %d.\n", y);
} //变量y的作用域结束
//变量x的作用域结束

}


void main()
{
int a[3][4];
//i,j的作用域出了for之后就结束了
for(int i = 0; i < 3; i++)
for(int j = 0; j < 4; j++)
printf("a[i][j]\n");

//error:'i'undeclared(first use in this function)
for(i = 0; i < 3; i++)
//error:'j'undeclared(first use in this function)
for(j = 0; j < 4; j++)
printf("a[i][j]\n");
}


文件作用域:在函数外部定义的变量称为全局变量。全局变量的作用域称为文件作用域,其作用域是整个源程序。
注意:全局变量定义必须放在所有的函数之外,且同一变量只能定义一次,其定义格式:数据类型 变量名1,变量名2...;可在程序的各个函数内使用全部变量,使用前应用extern进行说明,说明格式为:extern 数据类型 变量名1, 变量名2...;
当全局变量的定义在使用之前时,可省略其说明。
全局变量在定义时就已经分配了内存单元,定义时可初始化(若不初始化,其缺省值为0),说明只是表明在函数内要使用某全局变量,不能再赋初始值了。
void f1()
{
//全局变量说明,不可再赋初值,但是可以进行运算
extern int a, b;
printf("a = %d, b = %d.\n", a++, b++); //0 5
}
int a, b =5;
void main()
{
f1();
printf("a = %d, b = %d.\n", a++, b++); //1 6
}


在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,缺省使用的是局部变量。
通过作用与运算符“::”可对局部变量同名的全局变量进行访问。作用域运算符"::"仅用于全局变量。但是切记,C语言中不行,C++中可以。
int var = 1;
void main()
{
int var = 0;
printf("var = %d.\n", var);
var =::var;
printf("var = %d.\n", var);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值