4.变量、常量
生活中的有些值是不变的(比如:圆周率、身份证号码、性别、血型等)
有些值是可变的(比如:体重、年龄、薪资)
不变的值,C语言中用常量的概念来表示;变的值,C语言中用变量来表示
4.1定义变量的方法
char ch = "q";
int age = 18;
float weight = 55.5f;
4.2变量的命名
只能由字母(包括大写和小写)、数字和下划线( _ )组成
不能以数字开头
有意义,如int age、float salary
变量名区分大小写
变量名不能使用关键字
4.3变量的分类
局部变量
全局变量
#include <stdio.h>
int main()
{
int a = 10;
int a = 100;
printf("a=%d\n", a);//报错,因为a被重定义
return 0;
}
#include <stdio.h>
int a = 100;//全局变量
int main()
{
int a = 10;//局部变量
printf("%d\n",a);//打印10
return 0;
}
注:当局部变量和全局变量同名的时候,局部变量优先使用
4.4变量的使用
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;//0-->初始化
//输入2个整数
scanf("%d %d", &num1, &num2);
//求和
int sum = num1 + num2;
//输出
printf("%d\n", sum);
return 0;
}
注:在VS编译器中,scanf函数可能无法直接使用的原因主要是出于安全考虑。
解决办法1:在源文件顶部添加 #define_CRT_SECURE_NO_WARNINGS
4.5变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域
1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期
#include <stdio.h>
int main()
{
{
int a = 10;
printf("a=%d\n", a);
}
printf("a=%d\n", a);//报错,a-->局部变量,超出生命周期
return 0;
}
#include <stdio.h>
int main()
{
int a = 10;
{
printf("a=%d\n", a);
}
printf("a=%d\n", a);//打印出来两个10
return 0;
}
#include <stdio.h>
int a = 10;//全局变量
int main()
{
{
printf("a=%d\n", a);
}
printf("a=%d\n", a);//打印出来两个10
return 0;
}
#include <stdio.h>
int a = 10;
void test()
{
printf("test-->%d\n",a);
}
int main()
{
test();
{
printf("a=%d\n",a);
}
printf("a=%d\n",a);
return 0;
}
#include <stdio.h>
extern int a;//在另一源文件中创建int a = 10;
void test()
{
printf("test-->%d\n", a);
}
int main()
{
test();
{
printf("a=%d\n", a);
}
printf("a=%d\n", a);
return 0;
}
extern是声明来自外部的符号
4.6常量
C语言中的常量分为以下以下几种:
字面常量
const 修饰的常变量
#define 定义的标识符常量
枚举常量
1.字面常量
#include <stdio.h>
int main()
{
30;
3.14;
'w';
"asdf";
return 0;
}
2.const 修饰的常变量
#include <stdio.h>
int main()
{
int a = 10;
a = 20;
printf("%d\n", a);//打印结果为20,说明a为变量
return 0;
}
```c
#include <stdio.h>
int main()
{
const int a = 10;//加上const会报错,不让改。在C语言中,const修饰的a,本质是变量,但是不能直接修改,有常量的属性
a = 20;
printf("%d\n", a);
return 0;
}
注:
上面例子上的 a被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了变量 a不能直接被改变,但是 a本质上还是一个变量的,所以叫常变量。
验证const修饰的a是变量/常变量
#include <stdio.h>
int main()
{
int a = 10;
int arr[10] = {0};//正常运行,10是常量
return 0;
}
#include <stdio.h>
int main()
{
int a = 10;
int arr[a] = {0};//报错,a是变量。arr[]:括号内应输入常量表达式
return 0;
}
#include <stdio.h>
int main()
{
const int a = 10;
int arr[a] = {0};//仍然报错,报错原因:arr[]:括号内应输入常量表达式。说明a仍然为变量
return 0;
}
3.#define 定义的标识符常量
#include <stdio.h>
#define MAX 100
int main()
{
printf("%d\n",MAX);
return 0;
}
#include <stdio.h>
#define MAX 100
int main()
{
MAX = 200;
printf("%d\n",MAX);//会报错
return 0;
}
#include <stdio.h>
#define STR "asdf"//asdf为字符串
int main()
{
printf("%s\n", STR);//打印字符串用%s
return 0;
}
4.枚举常量
enum Color
{
RED,
GREEN,
BLUE
};//括号内的 RED,GREEN,BLUE 都是枚举常量
int main()
{
printf("%d\n", RED);//0
printf("%d\n", GREEN);//1
printf("%d\n", BLUE);//2
return 0;
}
注:枚举常量的默认是从0开始,依次向下递增1
enum Color
{
RED,
GREEN,
BLUE
};
int main()
{
int num = 10;
enum Color c = RED;
RED = 10//报错,不可改
return 0;
}