关于局部变量,形式参数和全局变量在代码块中的作用域

来源:互联网 发布:数据库集群硬件 编辑:程序博客网 时间:2024/05/16 07:23

局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁

#include<stdio.h>int fun(){int a = 19;{int a = 20;{int a = 21;printf("%d\n", a);    //21,局部优先,但只在当前代码块起作用,出代码块就销毁。}printf("%d\n", a);     //20,局部优先,但只在当前代码块起作用,出代码块就销毁。return a;}}int main(){int word = 0;int a=0;word = fun(a);system("pause");return 0;}
#include<stdio.h>#include<stdlib.h>int main(){printf("hello\n");int num = 20;       //(不同平台下可能会)出现error,C语言中变量声明必须放在在当前代码块的最前面,不是所有代码块的最前面printf("%d", num);system("pause");return 0;}
在局部变量之前加上static(静态变量)放在不同的位置:

#include<stdio.h>void fun(){int i = 0;static int num = 0;for (i = 0; i < 10; i++){num++;printf("%d\n", num);  //1,2,3,4,5,6,7,8,9,10}}int main(){fun();system("pause");return 0;}
#include<stdio.h>void fun(){int i = 0;for (i = 0; i < 10; i++){static int num = 0;  //初始化num,只执行一次,num是一个静态变量,创建后不再销毁,直到程序当前代码块结束num++;printf("%d\n", num);  //1,2,3,4,5,6,7,8,9,10}}int main(){fun();system("pause");return 0;}
<pre class="objc" name="code">#include<stdio.h>void fun(){int i = 0;for (i = 0; i < 10; i++){int num = 0;     num是局部变量,每次进入循环时创建,出代码块时销毁num++;printf("%d\n", num); //1,1,1,1,1,1,1,1,1,1}}int main(){fun();system("pause");return 0;}

#include<stdio.h>void fun(){int i = 0;static int num = 0;for (i = 0; i < 10; i++){num = 0;   //赋值,不管num的值是多少,进入循环后,每次都会被赋值为0.num++;printf("%d\n", num); 1,1,1,1,1,1,1,1,1,1}}int main(){fun();system("pause");return 0;}
#include<stdio.h>int main(){void fun(void);int i = 0;for (i = 0; i < 10; i++){fun();   //调用fun函数,j是局部变量,调用一次,销毁一次,每次调用,重新创建}printf("\n");system("pause");return 0;}void fun(void){int j = 0;j++;printf("%d ", j);   //1,1,1,1,1,1,1,1,1,1}
#include<stdio.h>int main(){void fun(void);int i = 0;for (i = 0; i < 10; i++){fun();  //j是一个静态变量,创建后,直到程序当前代码块结束时销毁}printf("\n");system("pause");return 0;}void fun(void){static int j = 0;j++;printf("%d ", j);  //1,2,3,4,5,6,7,8,9,10}
#include<stdio.h>int main(){void fun(void);int i = 0;for (i = 0; i < 10; i++){fun();}printf("\n");system("pause");return 0;}static int j = 0;void fun(void){j = 0;   //赋值,每次调用都会给j赋值为1j++;printf("%d ", j);    //1,1,1,1,1,1,1,1,1,1
}   

形式参数:把定义声明在函数参数里面,也相当于局部变量,只对当前代码块起作用。使用完成后自动销毁

#include<stdio.h>int is_in(char *s, char c)  //*s和c都属于形式参数{while (*s)if (*s == c){printf("exist");return 1;}else{s++;}return 0;}int main(){char *p = "abcdef";char c = 'd';is_in(p, c);system("pause");return 0;}

全局变量:所有在代码块之外({}大括号之外)定义的变量,当全局变量与局部变量冲突时,局部优先。

#include<stdio.h>int a = 20;int b;    //声明int fun1(){printf("b=%d", b);  //20return 0;}int b = 30;  //定义,b在所有代码块的外部,是一个全局变量,对程序所有代码块起作用,所以fun1可以调用,但需要提前声明int fun2(){return 1;}int main(){fun1();system("pause");return 0;}


0 0
原创粉丝点击