上一篇blog中,我们写了两个程序,一起来回顾一下~
#include<stdio.h>
int main()
{
int a=10;
printf("%d\n",a);
return 0;
}
在这个程序中,我们定义了一个名为a的变量,并申请了4个字节的内存空间,用来存放10这个整数。
#include<stdio.h>
int main()
{
char a='h';
printf("%c\n",a);
return 0;
}
在这个程序中,我们定义了一个名为a的变量,并申请了1个字节的内存空间,用来存放h这个字符。
那么,上面两个程序中的a即为变量。接下来,我们系统地学习一下如何定义一个变量。
变量的定义
根据上面两个程序,我们可以很轻松地总结出变量的定义方法:数据类型+变量名=赋值
下面我们来写一个关于个人年龄、身高、体重、姓名首字母的程序:
#include<stdio.h>
int main()
{
int age=20;
int height=180;
float weight=70.5;
char name='y';
printf("%d\n",age);
printf("%d\n",height);
printf("%f\n",weight);
printf("%c\n",name);
return 0;
}
此程序运行结果:
局部变量和全局变量
我们经常能看到“局部”和“全局”这两个词语,那么在C语言中,局部变量和全局变量又是怎样的呢?我们先来看几个程序:
1.变量age作为全局变量使用
#include<stdio.h>
int age=100;
int main()
{
printf("%d\n",age);
return 0;
}
程序执行结果:
2.变量age作为局部变量使用
#include<stdio.h>
int main()
{
int age=100;
printf("%d\n",age);
return 0;
}
程序执行结果:
(1)printf语句外再添一组中括号{}
.#include<stdio.h>
int main()
{
int age=100;
{
printf("%d\n",age);
}
return 0;
}
程序执行结果:
(2)变量age外再添一组中括号{}
#include<stdio.h>
int main()
{
{
int age=100;
}
printf("%d\n",age);
return 0;
}
程序执行结果:可以看到程序在编译时出现了错误,无法执行
为什么会出现这种问题呢?因为此时我们设置的变量age是在主函数中又创建了一个中括号{},因此age处于二级括号中,而执行的打印函数处于主函数中的一级括号,匹配不对等,因此出现错误。
(3)我们在上面程序的基础上,将printf语句也放置在age所在的中括号{}中,看一下结果会不会发生变化
#include<stdio.h>
int main()
{
{
int age=100;
printf("%d\n",age);
}
return 0;
}
程序执行结果:
此时,程序编译成功,没有报错。
(4)类比上面两个程序,我们再来调整一下printf语句,使其也处于单独的二级括号中,观察结果的变化
#include<stdio.h>
int main()
{
{
int age=100;
}
{
printf("%d\n",age);
}
return 0;
}
程序执行结果:
可以看到,编译又出现了错误,无法执行。
简单的定义一下局部变量和全局变量:
局部变量:定义在代码块{}内的变量
全局变量:定义在代码块{}外的变量
3.将局部变量和全局变量的名称设置相同,查看输出结果
在下面这个程序中,我们将局部变量和全局变量的名称均设为a,但局部变量a=10,全局变量a=100
#include<stdio.h>
int a=100;
int main()
{
int a=10;
printf("%d\n",a);
return 0;
}
程序执行结果:
可以看到,输出结果为10,即局部变量所定义的数字。因此,若局部变量和全局变量的变量名相同时,局部变量优先。(一般不要使局部变量和全局变量的变量名相同)
生命周期
1.局部变量生命周期:进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量生命周期:即整个程序生命周期。(全局变量作用域:整个工程文件)
连接外部文件中的变量方法:extern+变量类型+变量名称