如何定义变量
变量即是可以改变的量,例如年龄,体重等等。而不可改变的量就是常量,这个放在后面具体来说。回归到问题,在C语言中我们如何去创建一个变量呢?又有怎样的格式呢?
简单来说就是 “数据类型+变量名字 = 0” ,当然后面不去赋值在语法上也是允许的,但是不推荐。举个实际的例子:int age = 20; float weight = 70.0;
既然变量是可变的,那不妨放到代码中试试看。
#include <stdio.h>
int main()
{
int age = 40;
age = age + 1;
printf("%d\n",age);
return 0;
}
运行得到结果是41表明运行成功,这也说明了变量是可变的。
这段代码与昨天的代码中都出现了 %d ,意思是打印一个整型,与之类似的还有 %f 和 %lf 分别对应着打印 float 和 double 。
---------------------------------------------------------------------------------------------------------------------------------
变量的分类
变量分为全局变量和局部变量。为便于理解以下列代码为例:
#include <stdio.h>
int a = 123;//全局变量
int main()
{
int a = 456;//局部变量
printf("%d\n",a);
return 0;
}
如上面注释的一样,在花括号外面的是全局变量,在花括号内部的就是局部变量。有个问题是当这段代码运行起来时, printf 打印出的是123还是456呢?换句话说就是全局变量与局部变量名字冲突时,哪个优先级更高。根据结果是456可以得出是局部优先。当然最好的方式还是避免名字冲突的尴尬情况。
---------------------------------------------------------------------------------------------------------------------------------
求和代码
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int sum = 0;
scanf("%d %d", &a, &b);
sum = a + b;
printf("sum = %d\n",sum);
return 0;
}
这里引入了一个新函数 scanf ,这是一个输入函数。具体格式如上,具体含义为:
scanf("%d %d", &a ,&b);
""双引号内的两个%d代表输入的内容
&a代表将前面第一个%d所输入的内容存放到a中,&b代表将前面第二个%d所输入的内容存放到b。
而在这之前我们分别创建了变量a,b和sum用于存放,且sum = a + b ,这时用 printf 打印出最终结果也就是sum,这样就可以了。
如果使用的是VS编译器,可能会出现报错。这是因为VS推荐使用 scanf_s 函数,但这个是VS自带的函数,不是C语言标准规定的,放到其他编译器里是跑不起来的,为使这段代码通用,仍就使用 scanf 函数,解决方法在报错中也有提到,就是在源文件的第一行加入 #define _CRT_SECURE_NO_WARNINGS 1
---------------------------------------------------------------------------------------------------------------------------------
变量的作用域和生命周期
#include <stdio.h>
int A = 2023;
int main()
{
printf("1:%d\n", A );
{
int B = 824;
printf("2:%d\n", B );
printf("3:%d\n", A );
}
printf("4:%d\n", B );
return 0;
}
分析上面这段代码不难发现,A是全局变量,B是局部变量。当运行的时候 printf("4:%d\n", B ); 就会报错,原因在于B是局部变量的作用域就是局部变量的所在局部范围。而 printf("3:%d\n", A ); 没有报错可以得出全局变量的作用域是整个工程。
但当在这个工程中新建一个源文件编写代码如下:
#include <stdio.h>
int main()
{
printf("%d\n", A );
return 0;
}
既然全局变量的作用域是整个工程,那么在此个源文件中没有创建全局变量A,能否跨文件使用呢?运行结果告诉我们是会报错的。
解决方法也很简单,就是在这个源文件中声明一下这个变量就可以正常使用了,有些类似于使用 printf 前要 #include <stdio.h> 声明。
#include <stdio.h>
extern int A;
int main()
{
printf("%d\n", A );
return 0;
}
如上所示,在开头使用 extern 声明即可正常运行。
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束。
全局变量的生命周期:程序的生命周期。
=========================================================================
常量的四种分类
1.字面常量
2. const 修饰的常变量
3. #define 修饰的标识符常量
4.枚举常量
---------------------------------------------------------------------------------------------------------------------------------
字面常量
int main()
{
3.14;
2023;
'a';
"abcdef";
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
const 修饰的常变量
#include <stdio.h>
int main()
{
int A = 2023;
A = 824;
printf("A = %d\n", A );
return 0;
}
上面这段代码的输出结果是824,不难发现这是一个变量。而当在 int A 前面加上 const 修饰,此时A 就变为了一个常变量,不可以被下面的A = 824 改变,运行时也会报错“左值指定const报错”。错误代码如下:
#include <stdio.h>
int main()
{
const int A = 2023;
A = 824;
printf("A = %d\n", A );
return 0;
}
常变量的本质是变量,具有常量不能被改变的属性。在需要常量的地方,常变量是不可以的,会报错。
---------------------------------------------------------------------------------------------------------------------------------
#define 修饰的标识符常量
#include <stdio.h>
#define MAX 2023
int main()
{
int a = MAX;
printf("a = %d\n",a);
return 0;
}
以上代码输出结果就是2023,而 MAX 就是被定义的常量,不可被更改。
---------------------------------------------------------------------------------------------------------------------------------
枚举常量
enum Sex
{
MALE,
FEMALE,
SECRET
};
这就是枚举常量的定义,表示这种枚举类型的变量的未来可能取值。
#include <stdio.h>
enum Sex
{
MALE,
FEMALE,
SECRET
};
int main()
{
printf("%d\n",MALE);
printf("%d\n",FEMALE);
printf("%d\n",SECRET);
return 0;
}
当将他们三个分别打印出来时得到:
0
1
2
这也就是说枚举常量是常量,他的值是从0默认开始的。
#include <stdio.h>
enum Sex
{
MALE,
FEMALE,
SECRET
};
int main()
{
//MALE = 3//这样改会报错,因为这是常量
printf("%d\n",MALE);//0
printf("%d\n",FEMALE);//1
printf("%d\n",SECRET);//2
return 0;
}
常量是可以赋初值的
#include <stdio.h>
enum Sex
{
MALE = 3,//赋初值
FEMALE,
SECRET
};
int main()
{
printf("%d\n",MALE);//3
printf("%d\n",FEMALE);//4
printf("%d\n",SECRET);//5
return 0;
}
这样得到的输出结果就是:
3
4
5