C 语言学习笔记:变量与常量

C 语言学习笔记:变量与常量

​在 C 语言的学习旅程中,变量与常量是基础且关键的知识点。理解它们的概念、定义方式、命名规则以及作用域,对于后续深入学习 C 语言编程至关重要。本文将围绕这些方面展开详细介绍。

一、变量与常量的定义

在编程世界里,变量和常量是两个基础概念。简单来说,内容会改变的量就是变量,而内容不可变的量则是常量。用生活中的例子来理解,变量就如同汽车行驶的速度,会因路况、驾驶习惯等因素而变化;常量则像一年的月份数量,始终固定为 12 个 ,不会轻易改变。

二、变量的命名规则

变量的命名不是随意为之,需要遵循一定规则:

见名知意:这是非常重要的一点。一个好的变量名应该能够清晰地表达该变量的用途,这样在阅读和维护代码时,其他人(包括未来的自己)能迅速理解代码含义。比如,用studentAge表示学生的年龄,用userName表示用户名,看到变量名就能知道它所代表的数据内容。字符组成限制:变量名只能由字母、数字和下划线组成,并且不能以数字开头。像123abc这样以数字开头的名称是不合法的变量名,而abc123、_abc、abc_123等则是符合规则的。避免使用关键字:C 语言中有一些具有特殊含义的关键字,如int、return、if等,这些关键字不能用作变量名,否则会导致编译错误。

此外,常见的命名风格有驼峰命名法(如studentAge)和下划线命名法(如student_age) 。不同的命名风格在不同的编程环境和团队中可能有不同的偏好,但只要保持一致性,都能有效提高代码的可读性。

三、定义变量的方法

在 C 语言中定义变量时,有一些要点需要注意:

赋初始值:一定要给变量赋初始值,否则使用未初始化的变量可能会导致不可预期的结果。例如,当你定义一个int类型的变量num却未初始化,直接使用printf("%d", num);输出时,可能会得到一个随机的数值,因为未初始化的变量在内存中的值是不确定的。避免重名:在相同的作用域内,变量名不能重复定义,否则会造成混淆,导致编译错误。

下面是一个定义变量的示例代码:

#include

#define _CRT_SECURE_NO_WARNINGS

int main() {

// 变量定义的注意部分:

// 1. 一定要赋初始值,防止使用未初始化的变量导致不可预期的结果

// 2. 不能重名,避免造成混淆和编译错误

// 身高、体重为浮点型数据

double height = 1.8;

double weight = 135;

printf("身高: %.2f\n", height);

printf("体重: %.2f\n", weight);

return 0;

}

在这段代码中,定义了height和weight两个double类型的变量,并分别赋予初始值,然后使用printf函数输出变量的值。

四、变量的分类与作用域

变量主要分为局部变量和全局变量,它们的作用域有明显区别。

局部变量:局部变量就像是在某个房间里使用的工具,只能在这个房间({ })内发挥作用。一旦离开了这个{ },变量就会从内存中销毁。例如:#define _CRT_SECURE_NO_WARNINGS

#include

int main() {

{

int a = 10;

printf("局部作用域内 a 的值: %d\n", a);

}

// a 在局部范围外,下面这行代码会导致编译错误

// printf("局部作用域外 a 的值: %d\n", a);

return 0;

}

在上述代码中,a是在{ }内定义的局部变量,在{ }外尝试访问它会引发编译错误。

2. 全局变量:全局变量类似于公共区域的设施,整个房子(整个工程)里的人都能使用。它的作用域涵盖了同一个文件内的不同函数,甚至不同文件内的函数(前提是通过extern关键字声明)。例如:

#define _CRT_SECURE_NO_WARNINGS

#include

// 全局变量

int a = 10;

void test() {

// test方法内部可以使用

printf("test函数中 a 的值: %d\n", a);

}

int main() {

test();

// main方法内部可以使用

printf("main函数中 a 的值: %d\n", a);

return 0;

}

在这个例子中,a是全局变量,在test函数和main函数中都能正常访问和使用。

如果在不同文件中使用全局变量,可以通过extern关键字来声明。假设在database.c文件中定义了全局变量a:

// database.c文件内容

#define _CRT_SECURE_NO_WARNINGS

// 定义全局变量

int a = 20;

在另一个 C 文件中,就可以这样使用:

#define _CRT_SECURE_NO_WARNINGS

#include

// extern 关键字表明 a 是一个在其他地方定义的全局变量

extern int a;

void test() {

printf("test函数中 a 的值: %d\n", a);

}

int main() {

test();

printf("main函数中 a 的值: %d\n", a);

return 0;

}

需要注意的是,当全局变量和局部变量名称相同时,在局部变量的作用域内,以局部变量赋的值为准。

五、常量的定义

在 C 语言中,常量有多种类型,常见的包括字面常量、const修饰的常量、#define宏定义的标识符常量以及枚举常量。

字面常量:就是直接写在代码中的常量值。例如:int age = 10;

char name[12] = "张三";

char gender = 'M';

这里的10、"张三"、'M'都是字面常量。

2. const 修饰的常量:使用const关键字修饰的常量,一旦赋值后就不能再更改。通常为了提高代码可读性,const常量的命名习惯采用全大写。例如:

#define _CRT_SECURE_NO_WARNINGS

#include

int main() {

// 常量是一种特殊的变量,赋了值后不能更改!

// const 的命名规则:全大写,提高代码可读性

const double PI = 3.14; // 圆周率

const double E = 2.71828; // 自然对数

printf("圆周率: %.2f\n", PI);

printf("自然对数: %.5f\n", E);

// 尝试修改 const 常量会导致编译错误

// PI = 3.15;

return 0;

}

如果尝试取消注释PI = 3.15;这行代码,编译时会报错,因为const修饰的常量不允许被修改。

3. #define 宏定义的标识符常量:#define是 C 语言中的预处理指令,用于定义标识符常量。它的工作原理是在编译之前进行简单的文本替换。例如:

#include

// 全局常量

// 标识符常量

// 易错点说明:

// 1. 不能添加 ;,因为 #define 是简单的文本替换,添加分号会导致替换后的代码出现语法错误

// 2. 不能写成 PI = 3.14,#define 不是赋值语句

#define PI 3.14

#define AGE 18

#define COUNTRY "中国"

int main() {

printf("圆周率: %.2f\n", PI);

printf("年龄: %d\n", AGE);

printf("国家: %s\n", COUNTRY);

return 0;

}

在使用#define定义常量时,要注意不能添加分号,也不能写成类似赋值的形式,如PI = 3.14,这不符合其语法规则。

4. 枚举常量:使用enum关键字定义枚举常量,它用于将有穷集合的所有数据一一罗列出来。枚举常量默认从 0 开始依次递增,也可以手动赋值。例如:

#define _CRT_SECURE_NO_WARNINGS

#include

// 定义性别枚举类型

enum Gender {

MALE, // 男,默认值为0

FEMALE, // 女,默认值为1

SECRECY // 保密,默认值为2

};

int main() {

// 枚举:将有穷集合所有数据,一一罗列出来

// 有穷集合:数据有限

int age = 10;

// 定义枚举类型的变量

enum Gender gender = FEMALE;

if (gender == MALE) {

printf("性别是:男性\n");

} else if (gender == FEMALE) {

printf("性别是:女性\n");

} else {

printf("性别是:保密\n");

}

return 0;

}

在这个例子中,定义了Gender枚举类型,包含MALE、FEMALE、SECRECY三个枚举常量,并定义了gender变量,根据其值进行不同的输出。如果想要手动赋值,可以这样写:

enum Color {

RED = 1,

GREEN = 2,

BLUE = 3

};

这样RED的值就是 1,GREEN的值是 2,BLUE的值是 3 。

通过对变量和常量的深入学习,我们为进一步掌握 C 语言编程打下了坚实的基础。在后续的学习中,我们将继续探索 C 语言的其他重要特性。

希望这篇学习记录能对正在学习 C 语言的小伙伴们有所帮助,如有错误或不足之处,欢迎大家在评论区指正交流!​

相关推荐

“Lagogo”销量过万,不是好事
bat365在线登录入口

“Lagogo”销量过万,不是好事

📅 09-15 👁️ 4523
《英超欧冠世界杯足彩秘笈》欧赔亚盘理论—错位分平
bat365在线登录入口

《英超欧冠世界杯足彩秘笈》欧赔亚盘理论—错位分平

📅 07-09 👁️ 2216
张迈评球:世界杯进入淘汰赛,为什么冷门少了?当足球强国都开始踢防反……
2022年佳能80d还值得买吗(为什么说佳能80D依然是目前值得购买的一款单反相机)
基于PLC的T68型镗床的电气控制系统的设计
365bet投注网站

基于PLC的T68型镗床的电气控制系统的设计

📅 09-17 👁️ 2913
光纤接头
365bet游戏网站

光纤接头

📅 07-22 👁️ 8527