c语言变量之局部变量
一、什么是变量
变量是内存中的位置,其中放置程序可以修改的值。c变量必须在使用前定义。
例如:
type variable;
type必须是有效的c数据类型。
下面是实际的例子:
int a,b,c;
double e,f;
二、变量的分类及介绍
根据变量在程序中的位置,可以分为一下几种
1、函数内 我们称之为局部变量。
局部变量仅存在定义他们的代码块中,即起始于开大括号,止于闭大括号。
在一个代码块中的变量与另一个代码块中变量同名,没有任何关系,不会造成影响。但是最好不要同名。
变量名称要见名知意。
例如:
void fun(void);
void fun1(void);
int main(void)
{
fun();
fun1();
getch();
}
void fun(void)
{
int a=10;
printf("fun a is %d\n",a);
}
void fun1(void)
{
int a=100;
printf("fun1 a is %d\n",a);
}
程序输出结果是:
fun a is 10
fun1 a is 100
变量a被定义了2次,fun和fun1中的a互不相干。每个a变量仅在被定义的块内可知的。
局部变量可以在任何代码块中定义,不单单在函数的代码块中。例如:
#include <stdio.h>
void fun(void);
int main(void)
{
fun();
getch();
}
void fun(void)
{
int a;
printf(" Please input an integer!\n ");
scanf("%d",&a);
if(a==1)
{
char s[30];
printf("please input your name\n");
scanf("%s",s);
printf("your name is %s\n",s);
}
if(a==2)
{
int b;
b=10;
printf("b is %d\n",b);
}
}
局部变量s和b在if代码块的入口出建立,在出口处消亡。
当内部块的变量和外部变量同名的时候,内部块的变量屏蔽内部块的变量。例如:
int main(void)
{
int a;
a = 10;
if(a == 10) {
int a; /* this x hides the outer x */
a = 99;
printf("Inner a is : %d\n", a);
}
printf("Outer a is : %d\n", a);
getch();
return 0;
}
程序输出结果为:
Inner a is 10
Outer a is 99
if程序块中的a屏蔽了外部的变量a,当if程序块结束后,外部a又成了可见的了。
c89中变量的声明,必须在块的开头,如果在c89的编译器下编译如下代码将提示错误:
int main(void)
{
int a;
a = 10;
printf(" a is : %d\n", a);
int j;
j=200;
printf("j is : %d\n", j);
getch();
return 0;
}
然而在c99中向上面的例子是完全合法的。程序结果是:
a is 10
j is 200
2、函数参数 我们称之为形式参数简称形参。
形参的作用和函数内的任何变量相同, 形参在函数后面的()中定义 例如:
int char_in_srting(char *s,char c);
int main(void)
{
char string[30],achar;
printf("Please input a char\n");
scanf("%c",&achar);
printf("Please input a string\n");
scanf("%s",string);
int a;
a=char_in_srting(string, achar);
if (a==1) printf("%c is in %s",achar,string);
else printf("%c is not in %s",achar,string);
getch();
return 0;
}
int char_in_srting(char *s, char c)
{
while(*s)
if(*s==c) return 1;
else s++;
return 0;
}
运行程序
Please input a char
我们输入 c字符
Please input a string
我们输入 asdf
程序的输出结果是: c is not in asdf。
形参和局部变量一样,可以赋值,允许在任何表达式中使用。函数结束的时候变量自动销毁。
3、所有函数之外 我们称之为全局变量
全局变量在程序中总是可见的,可以被任何代码使用,在程序的执行期间,全局变量可以保存其值。
#include <stdio.h>
int bl;
void fun1(void);
void fun2(void);
void fun3(void);
int main(void)
{
bl = 100;
fun1();
getch();
return 0;
}
void fun1(void)
{
int temp;
temp = bl;
fun2();
printf("fun1 bl is %d\n", bl);
printf("fun1 temp is %d\n", temp);
fun3();
printf("after fun3 ,fun1 bl is %d\n", bl);
}
void fun2(void)
{
int bl;
for(bl=1; bl<10; bl++)
printf("fun2 bl is %d\n",bl) ;
}
void fun3(void)
{
bl+=100;
}
main fun1和fun3都没有声明bl,但是都能够使用bl。fun2中使用了局部变量bl,屏蔽了全局变量bl。
main中赋值bl100,当fun3中更改bl,fun1中立刻提现出来了。
在程序中尽可能的少用全局变量,当大量使用全局变量的时候,可能会引起程序错误和调试上的问题。
注:文章的程序代码全部通过dev c++5测试通过。