10.作用域

Posted traditional

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.作用域相关的知识,希望对你有一定的参考价值。

//作用域
/*
	任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:

	在函数或块内部的局部变量
	在所有函数外部的全局变量
	在形式参数的函数参数定义中
*/
//局部变量
/*
	在某个函数或块的内部声明的变量成为局部变量,它们是能在该函数或该代码块的内部使用。
	局部变量在函数外部是不可知的举个栗子
*/
#include <stdio.h>
int main01()
{
	//局部变量声明
	int a,b;
	int c;
	//初始化
	a = 10;
	b = 20;
	c = a+b;
	printf("a=%d,b=%d,c=%d
",a,b,c);  //a=10,b=20,c=30
	return 0;
}

//全局变量
int g=22;
int main02()
{
	//局部变量声明
	int a,b;
	int g;
	
	// 变量的定义
	a = 1;
	b = 2;
	g = a+b;
	printf("a=%d,b=%d,g=%d
",a,b,g);//a=1,b=2,g=3
	//程序内,局部变量和全局变量的名字可以相同,局部变量会覆盖掉全局变量
	//当然这是在这个函数内,函数执行完毕之后,局部变量就被销毁了
	//就是说,先从自己的作用域里面找,找到了就用,找不到再从全局变量里面找
	return 0;
}

//全局变量声明
int a = 100;
int main03()
{
	//声明局部变量
	int a=10;
	int b=20;
	int c=0;
	int sum(int,int);
	printf("a in main=%d
",a);  //a in main=10
	c = sum(a,b);
	printf("c in main=%d
",c); //c in main=30
	return 0;
}
int sum(int a, int b)
{	
	//这里的a由形参决定,关键看调用sum的时候传的值是多少
	//在main中,将a传进sum中,main中已经定义了a=10;所有不会再从全局变量中找
	printf("a in sum=%d
",a); //a in sum=10
	printf("b in sum=%d
",b); //b in sum=20
	return a+b;
}

//我们再来验证一下,看看如果在函数内部不定义局部变量
int c=50;
int main04()
{
	int print(int , int);
	int a=20;
	//需要传入a和c,a在内部定义了,但是c没有,于是从全局变量中找
	//所以传入的是20和50
	//c=20+50=70
	c = print(a, c);
	printf("c in main = %d
",c); //c in main = 70
	
}
int print(int a, int c)
{
	printf("a in print = %d
",a); //a in print = 20
	printf("c in print = %d
",c); //c in print = 50
	return a+c;
}


//初始化局部变量和全局变量
//局部变量被初始化时,系统不会对其初始化,强行打印会得到一个很大的值。因此必须自己手动初始化
//定义全局变量时,系统会自动进行初始化
/*
		数据类型	初始化默认值
		int	         0
		char	     ‘‘
		float	     0
		double	     0
		pointer	     NULL
*/
//正确地初始化变量是一个好习惯,否则程序有时会产生一些意想不到的结果。
//因为未初始化的变量会导致一些垃圾值


//形参
/*
	C的形参与实参
	形式参数:只是生命一个作为参数的变量,并未直接进行赋值使用,而实际参数则相反
*/
//举个栗子
int test(int, int); //形参,只声明
int main()
{
	int result;
	result = test(5,3);//实参,已赋值
	printf("result=%d
", result); //result=8
}
int test(int a,int b)
{
	a=a+b;
	return a;
}

  

以上是关于10.作用域的主要内容,如果未能解决你的问题,请参考以下文章

JS 作用域及作用域链

作用域是什么?

JavaScript 作用域 与 作用域链

JS---闭包

java代码在片段活动中不起作用

angularjs作用域之transclude