您的位置:首页 > 编程语言

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

2015-11-28 14:21 369 查看
局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁

#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 &
4000
lt; 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赋值为1
j++;
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); //20
return 0;
}int b = 30; //定义,b在所有代码块的外部,是一个全局变量,对程序所有代码块起作用,所以fun1可以调用,但需要提前声明
int fun2()
{
return 1;
}int main()
{
fun1();
system("pause");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: