深入理解C语言中的变量和常量

变量和常量

    • 1. 前言
    • 2. 预备知识
      • 2.1 printf和%d
      • 2.2 \n
      • 2.3 scanf
      • 2.4 scanf在vs中报错
      • 2.5 extern
      • 2.6 数组的初始化
    • 3. 变量和常量的区别
    • 4. 变量
      • 4.1 定义变量的方法
      • 4.2 变量的分类
        • 4.2.1 局部优先
      • 4.3 变量的使用
      • 4.4 变量的作用域
        • 4.4.1 局部变量的作用域
        • 4.4.2 全局变量的作用域
      • 4.5 变量的生命周期
        • 4.5.1 局部变量的生命周期
        • 4.5.2 全局变量的生命周期
    • 5. 常量
      • 5.1 字面常量
      • 5.2 const修饰的常变量
      • 5.3 #define定义的标识符常量
      • 5.4 枚举常量

深入理解C语言中的变量和常量_第1张图片

1. 前言

大家好,我是努力学习游泳的鱼。本文会带你进入变量和常量的大门,带你进一步了解C语言的奥秘。

2. 预备知识

2.1 printf和%d

#include 

int main()
{
	int a = 100;
	printf("a = %d\n", a);
	
	return 0;
}

这段代码会输出a = 100
因为a = %d中,%d表示打印整数,会被直接替换成a的值,即100

2.2 \n

\n是一个转义字符,表示换行。

2.3 scanf

scanf是C语言的库函数,对应的头文件是stdio.h
printf相反,scanf用来完成从键盘中输入数据的操作,
使用时注意在变量名前面加上&,这点初学者容易忘记。

#include 

int main()
{
	int a = 0;
	scanf("%d", &a); // 注意不能漏掉&
	
	return 0;
}

2.4 scanf在vs中报错

如果你使用的是visual studio系列的编译器,需要在程序的第一行加上一行代码才能使用scanf

#define _CRT_SECURE_NO_WARNINGS 1

如果你不嫌麻烦可以每次都加上这行代码。
如果你不想每次都写这行代码,可以在vs的安装路径找到newc++file.cpp文件,在里面加上这行代码即可。当然你也可以研究一下scanf的替代函数scanf_s,不过我不建议这么做。
第一步:找到newc++file.cpp
可以使用everything进行查找点这里下载
但是你直接打开的话是修改不了的,因为权限不够。这有两种解决方法。
解决方法一:把文件拖到桌面,修改后再放回去。
解决方法二:复制文件路径,管理员权限打开记事本,再打开文件路径就行了

2.5 extern

extern是用来声明外部符号的。任何变量或函数使用前都要先声明或者定义,如果这个函数或者变量在其他文件内,则可以使用extern声明。

2.6 数组的初始化

这里只需要明白,下面代码方括号里的10必须是个常量(不变的量)就行了。

int arr[10] = {0};

3. 变量和常量的区别

会改变的量,叫做变量。
不会改变的量,叫做常量。

4. 变量

4.1 定义变量的方法

类型+名字(+初始化)

int age = 10;
char ch = 'w';

4.2 变量的分类

变量分为全局变量和局部变量。
定义在大括号外部的变量叫做全局变量。
定义在大括号内部的变量叫做局部变量。

int b = 1000; // 全局变量 - 定义在大括号外面

int main()
{
	int a = 100; // 局部变量 - 定义在大括号里面

	return 0;
}

4.2.1 局部优先

当全局变量和局部变量的名字冲突时,局部优先

#include 

int a = 1000; // 全局变量

int main()
{
	int a = 100; // 局部变量
	printf("a = %d\n", a);
	
	return 0;
}

这里局部变量的a和全局变量的a名字冲突了,但是输出结果是a = 100

不建议把全局变量和局部变量的名字取成一样的!

4.3 变量的使用

写一个代码,完成两个整数的相加

#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;
}

4.4 变量的作用域

一个变量哪里可以使用,哪里就是它的作用域。

4.4.1 局部变量的作用域

局部变量的作用域是变量所在的局部范围。

#include 

int main()
{
	{
		int a = 100; // 局部变量
		printf("%d\n", a); // 这里可以使用
	}

	printf("%d\n", a); // 这里不能使用

	return 0;
}

4.4.2 全局变量的作用域

全局变量的作用域是整个工程。

#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;
}

4.5 变量的生命周期

一个变量从创建到销毁的时间段就是它的生命周期。

4.5.1 局部变量的生命周期

进作用域生命周期开始,出作用域生命周期结束。

4.5.2 全局变量的生命周期

全局变量的生命周期和程序的生命周期相同。即:与程序共存亡!

5. 常量

5.1 字面常量

直接写出来的常量就叫做字面常量。

20;
3.14;
'a'; // 字符常量
"abcdef"; // 字符串常量

字面常量可以给变量赋值或初始化。

int a = 10;
char ch = 'w';

5.2 const修饰的常变量

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修饰的常变量只是具有常属性,但本质上是个变量,不能当做常量来处理。

5.3 #define定义的标识符常量

#include 

#define M 100 // 这里M就是一个常量

int main()
{
	int a = M; // M可以给变量赋值
	int arr[M] = {0}; // M可以在数组初始化时指定大小
	printf("a = %d\n", a);
	
	return 0;
}

5.4 枚举常量

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;
}

你可能感兴趣的:(C语言,c语言,c++,开发语言)