大家好,我是努力学习游泳的鱼。本文会带你进入变量和常量的大门,带你进一步了解C语言的奥秘。
#include
int main()
{
int a = 100;
printf("a = %d\n", a);
return 0;
}
这段代码会输出a = 100
因为a = %d
中,%d
表示打印整数,会被直接替换成a
的值,即100
。
\n
是一个转义字符,表示换行。
scanf
是C语言的库函数,对应的头文件是stdio.h
和printf
相反,scanf
用来完成从键盘中输入数据的操作,
使用时注意在变量名前面加上&
,这点初学者容易忘记。
#include
int main()
{
int a = 0;
scanf("%d", &a); // 注意不能漏掉&
return 0;
}
如果你使用的是visual studio
系列的编译器,需要在程序的第一行加上一行代码才能使用scanf
。
#define _CRT_SECURE_NO_WARNINGS 1
如果你不嫌麻烦可以每次都加上这行代码。
如果你不想每次都写这行代码,可以在vs的安装路径找到newc++file.cpp
文件,在里面加上这行代码即可。当然你也可以研究一下scanf
的替代函数scanf_s
,不过我不建议这么做。
第一步:找到newc++file.cpp
可以使用everything
进行查找点这里下载
但是你直接打开的话是修改不了的,因为权限不够。这有两种解决方法。
解决方法一:把文件拖到桌面,修改后再放回去。
解决方法二:复制文件路径,管理员权限打开记事本,再打开文件路径就行了
extern
是用来声明外部符号的。任何变量或函数使用前都要先声明或者定义,如果这个函数或者变量在其他文件内,则可以使用extern
声明。
这里只需要明白,下面代码方括号里的10必须是个常量(不变的量)就行了。
int arr[10] = {0};
会改变的量,叫做变量。
不会改变的量,叫做常量。
类型+名字(+初始化)
int age = 10;
char ch = 'w';
变量分为全局变量和局部变量。
定义在大括号外部的变量叫做全局变量。
定义在大括号内部的变量叫做局部变量。
int b = 1000; // 全局变量 - 定义在大括号外面
int main()
{
int a = 100; // 局部变量 - 定义在大括号里面
return 0;
}
当全局变量和局部变量的名字冲突时,局部优先!
#include
int a = 1000; // 全局变量
int main()
{
int a = 100; // 局部变量
printf("a = %d\n", a);
return 0;
}
这里局部变量的a
和全局变量的a
名字冲突了,但是输出结果是a = 100
。
不建议把全局变量和局部变量的名字取成一样的!
写一个代码,完成两个整数的相加
#include
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
// 输入
scanf("%d %d", &num1, &num2);
// 求和
sum = num1 + num2;
// 输出
printf("sum = %d\n", sum);
return 0;
}
一个变量哪里可以使用,哪里就是它的作用域。
局部变量的作用域是变量所在的局部范围。
#include
int main()
{
{
int a = 100; // 局部变量
printf("%d\n", a); // 这里可以使用
}
printf("%d\n", a); // 这里不能使用
return 0;
}
全局变量的作用域是整个工程。
#include
int a = 100; // 全局变量
void test()
{
printf("test::%d\n", a); // 这里可以使用
}
int main()
{
test();
printf("main::%d\n", a); // 这里可以使用
return 0;
}
全局变量甚至可以跨文件使用,但在使用前要使用extern
声明。
test1.c
int a = 100; // 跨文件的全局变量
test2.c
#include
extern int a; // extern是用来声明外部符号的
void test()
{
printf("test::%d\n", a); // 可以使用
}
int main()
{
test();
printf("main::%d\n", a); // 可以使用
return 0;
}
一个变量从创建到销毁的时间段就是它的生命周期。
进作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期和程序的生命周期相同。即:与程序共存亡!
直接写出来的常量就叫做字面常量。
20;
3.14;
'a'; // 字符常量
"abcdef"; // 字符串常量
字面常量可以给变量赋值或初始化。
int a = 10;
char ch = 'w';
const
是C语言的关键字,意思是常属性。
被const
修饰的变量,具有常属性,在语法上不能改变,但本质上还是个变量。
所以,我们称这种变量为常变量。
int main()
{
const int a = 10;
a = 20; // 不能像这样改变a的值了
return 0;
}
下面证明const
修饰的常变量本质是个变量。
数组初始化时方括号里必须是常量。
int arr[10] = {0};
那么const
修饰的常变量能不能用来初始化数组时指定大小呢?
int main()
{
const int n = 10;
int arr[n] = {0}; // 这里会报错
return 0;
}
答案是:不能!
由此可知,
在C语言里,
const
修饰的常变量只是具有常属性,但本质上是个变量,不能当做常量来处理。
#include
#define M 100 // 这里M就是一个常量
int main()
{
int a = M; // M可以给变量赋值
int arr[M] = {0}; // M可以在数组初始化时指定大小
printf("a = %d\n", a);
return 0;
}
C语言提供了一个关键字:
enum
,就是枚举的意思。
枚举,即一一列举。
生活中有些东西是可以一一列举的。比如:
性别:男,女,保密。
三原色:红色,绿色,蓝色。
星期:星期一,星期二,……,星期日。
C语言提供了枚举类型。
enum Sex // enum Sex就是一个枚举类型
{
// 这里的MALE,FEMALE,SECRET就是枚举常量
MALE,
FEMALE,
SECRET
}; // 分号不能省略
int main()
{
enum Sex s = MALE; // 可以用枚举常量给枚举类型初始化或赋值
return 0;
}
枚举常量也是有值的,默认从
0
开始。
#include
enum Color
{
RED, // 0
GREEN, // 1
BLUE // 2
};
int main()
{
printf("%d %d %d", RED, GREEN, BLUE); // 输出0 1 2
return 0;
}