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.作用域的主要内容,如果未能解决你的问题,请参考以下文章