C 变量

C 变量是什么?

先问小伙伴们一个问题:学习一门语言,最先要了解的是什么呢?当然是词汇啊!就像学英语一样,再简单的一句话,我们也得先弄清楚每一个单词是什么意思,然后才知道一句话说的是什么,对吧?

同样的,学习 C 语言也是如此。先来看一句代码。

int year = 2030;

英语都是一句话一句话地表述的,上面这行代码就相当于 C 语言中的 “一句话”,我们称之为 “语句”。在 C 语言中,每一条语句都是以英文分号(;)作为结束符。每一条语句都有它特定的功能,这个跟英语一样,每一句话都有它表达的意思。

在 C 语言中,变量与常量就像是英语中的词汇,比如上面代码中的 year 就是 C 语言中的变量。变量指的是一个值可以改变的量。也就是说,变量的值在程序运行过程中是可以改变的。

提示: 从计算机内存的角度来看,变量是内存中一块具有特定名称的存储空间,用于存储数据。

C 变量的命名

想要使用变量,我们就肯定得先给它起一个名字(命名),就像每个人都有自己名字一样。当别人喊你的名字时,你就知道别人喊的是你,而不是路人甲。

当 C 程序需要使用一个变量时,我们只需要使用这个变量的名字就行了,总不能叫:“喂,我要用这个变量”,对吧?每个程序里面的变量那么多,鬼才知道你要用哪个变量呢。

变量的名字一般是不会变的,但它的值却可以变。这就像人一样,名字一般都是固定下来,但是每个人都会改变,都会从少年成长为中年,然后从中年慢慢变成老人。

C 变量就像人类一样

在 C 语言中,给一个变量命名,我们需要遵循以下2个方面的原则。

  • 变量名由字母、数字或下划线组成,并且第一个字符必须是字母或下划线。
  • 变量名不能是 C 语言关键字。

上面两句话很简单,但却非常重要,一定要字斟句酌地理解。从第 1 点可以知道,变量只可以包含字母(大写小写都行)、数字、下划线(_),不能包含除了这 3 种之外的其他字符(如 %、-、*、/、$ 等)。这是因为其他很多字符,C 语言都给它们分配了特定的功能,比如 “-” 就是减号,“/” 就是除号,“*” 就是乘号等。

对于第 2 点,关键字指的是 C 语言本身 “已经在使用” 的名字。因此我们在给变量命名的时候,是不能使用这些名字的(因为 C 语言要用)。想要知道 C 语言关键字都有哪些,另请参阅:C 关键字

示例 1:正确的 C 变量名

n
lvye_net
_site
a123

示例 2:错误的 C 变量名

123a         // 不能以数字开头
-abc         // 不能以中划线开头
my-name      // 不能包含中划线
break        // 不能和 C 关键字相同

此外,变量的命名一定要严格区分大小写,例如 name 与 Name 在 C 语言中就是两个不同的变量。

C 变量的使用

在 C 语言中,如果想要使用一个变量,我们一般需要进行 2 步:① 变量的声明;② 变量的赋值。其中 “变量的赋值” 又叫做 “变量的初始化”,这两种叫法是一样的,大家也要熟悉一下。

实际上,变量的声明是告诉计算机这是一个什么类型的变量,并为其分配相应的内存空间。变量的赋值,则是将具体的值存储到这块内存空间中。

语法:

类型名 变量名 = 值;

说明:

变量的声明,我们可以使用 int、float、char 等来声明,所谓的 “声明” 指的是定义变量的数据类型,比如 int a; 就表示定义了一个整数类型的变量,而 float a; 就表示定义了一个浮点数类型的变量。对于 C 数据类型,我们在下一节再详细介绍。

一般来说,变量的声明和变量的赋值(初始化),可以分开来实现,也可以合并来实现。下面 2 种方式是等价的。

// 方式 1:分开
int year;         // 变量的声明
year = 2030;      // 变量的赋值(初始化)

// 方式 2:合并
int year = 2030;

C 变量语法

在 C 语言中,如果写 int year;,然后直接打印 year(不赋值),那么它的值是一个 “垃圾值(随机数)”,而不是 0。因此,如果只声明了变量但没有给它赋值,千万不要直接使用或打印它。

示例 3:打印一个变量

#include <stdio.h>

int main(void)
{
    int a = 10;
    printf("%d", a);
    return 0;
}

运行结果如下。

10

分析:

在这个例子中,我们使用 int 来定义一个整数变量,该变量的名字为 a,变量的值为 10。然后使用 printf() 函数输出这个变量的值。对于变量的命名,我们尽量取一些有意义的英文名或英文缩写。当然,为了讲解方便,本教程有些变量的命名可能比较简单。在实际开发中,我们尽量不要太随便。

此外,我们也可以同时声明多个变量名,其中变量之间必须用 “英文逗号(,)” 隔开,下面 3 种方式是等价的。

// 方式 1
int a = 10;
int b = 20;
int c = 30;

// 方式 2
int a = 10, b = 20, c = 10;

// 方式 3
int a, b, c;
a = 10;
b = 20;
c = 30;

示例 4:修改变量的值

#include <stdio.h>

int main(void)
{
    int a = 10;

    a = 15;
    printf("%d", a);
    return 0;
}

运行结果如下。

15

分析:

咦?a 的值不是 10 吗?怎么输出 15 呢?大家别忘了,a 是一个变量。变量,简单来说就是一个值会变的量。因此 a = 15 会覆盖 a = 10。我们再来看一个例子就会有更深的理解了。

示例 5:变量值的改变

#include <stdio.h>

int main(void)
{
    int a = 10;

    a = a + 1;
    printf("%d", a);
    return 0;
}

运行结果如下。

11

分析:

a = a + 1; 表示 a 的最终值是在原来 a 的基础上加 1,因此 a 最终值为 11(10 + 1)。下面代码中,a 的最终值是 6,小伙伴们可以思考一下为什么。

int a = 10;
a = a + 1;
a = a - 5;

示例 6:变量先声明后赋值

#include <stdio.h>

int main(void)
{
    a = 10;
    printf("%d", a);
    return 0;
}

编译时会报错,如下所示。

(报错)each undeclared identifier is reported only once for each function it appears in

分析:

对于变量来说,我们最后还需要注意一点:变量必须先声明,然后再能对它赋值。如果一个变量没有声明就对它赋值,程序就会报错。

原因很简单,变量声明其实就是告诉计算机这是一个什么类型的变量,然后才能给这个变量分配对应大小的存储空间。如果没有变量声明,计算机就不知道这个变量的类型,接下来就不知道怎么面对这个突然闯进来的 “外来生物”了。

C 变量的常见问题

1. 在 C 语言中,变量声明和变量赋值这 2 步,有必要分开来写吗?

实际上很多 C 语言教材,都是把变量声明和变量赋值分开来写。一般都是先把整个程序需要用到的变量放在开始处统一声明,然后在后面再一个个进行赋值,比如下面的方式 1。

其实方式 1 是比较麻烦的,在绝大多数编程语言中,我们更多的是把变量声明和变量初始化合并在一起,也就是方式 2。在后面的学习中,我们也更推荐使用方式 2,主要是因为它更加直观简单,随想随用。

// 方式 1(不推荐)
#include <stdio.h>
int main(void)
{
    int a, b, result;      // 统一进行变量声明
    a = 10;
    b = 5;
    result = a + b;
    printf("%d", result);
    return 0;
}

// 方式 2(推荐)
#include <stdio.h>
int main(void)
{
    int a = 10;
    int b = 5;
    int result = a + b;
    printf("%d", result);
    return 0;
}

2. 变量的作用域是什么?

变量的作用域指的是变量在程序中有效的范围。在 C 语言中,变量主要有两种作用域:

  • 局部变量:在函数内部声明的变量,只在该函数内部有效。当函数执行结束后,局部变量所占用的内存空间会被释放。
  • 全局变量:在函数外部声明的变量,从声明的位置开始到整个程序结束都有效。

想要真正了解变量的作用域,需要等学完了 “C 函数” 这一章才行。

上一篇: C 环境配置

下一篇: C 常量

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号