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

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

一、变量与常量的定义

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

二、变量的命名规则

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

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

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

三、定义变量的方法

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

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

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

#include <stdio.h>
#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;
}

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

四、变量的分类与作用域

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

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

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 <stdio.h>

// 全局变量
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 <stdio.h>

// 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宏定义的标识符常量以及枚举常量。

  1. 字面常量:就是直接写在代码中的常量值。例如:
int age = 10;
char name[12] = "张三";
char gender = 'M';

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

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

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 <stdio.h>
// 全局常量
// 标识符常量
// 易错点说明:
// 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 <stdio.h>

// 定义性别枚举类型
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枚举类型,包含MALEFEMALESECRECY三个枚举常量,并定义了gender变量,根据其值进行不同的输出。如果想要手动赋值,可以这样写:

enum Color {
    RED = 1,
    GREEN = 2,
    BLUE = 3
};

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

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

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

C语言学习记录 文章被收录于专栏

C语言的初步学习

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务