ZetCode

C 变量

最后修改于 2023 年 4 月 10 日

在本文中,我们将展示如何在 C 语言中使用变量。

变量是一个存储位置。变量有一个名称和一个数据类型。数据类型决定了可以分配给变量的值,例如整数、字符串或布尔值。在程序运行期间,变量可以获得同一数据类型的各种值。

int x = 5;

x 是变量名。int 是数据类型,它决定了 x 变量可以保存什么值。= 是一个运算符,它将右侧的值赋给左侧的变量。5 是赋给 x 的整数字面量。最后,; 用于结束 C 语句。

变量名必须遵守 C 有效标识符的规则。变量名必须以字母或下划线 _ 开头。否则,它们可以由字母数字字符组成。在 C 语言中,变量名是区分大小写的。

C 变量示例

在下面的示例中,我们定义了几个变量。

simple.c
#include <stdio.h>

int main() {

    int x;
    int y, z;

    x = 5;
    y = 6;
    z = 7;

    float w = 4.5;
    double h = 5.5;

    printf("%d %d %d\n", x, y, z);
    printf("%f %f\n", w, h);

    x = 55;

    printf("%d\n", x);
}

在示例中,我们有五个变量。

int x;
int y, z;

我们定义了三个变量。它们是整数数据类型。可以在一行上定义多个变量。

x = 5;
y = 6;
z = 7;

xyz 变量被初始化为其值。

float w = 4.5;
double h = 5.5;

我们一次性定义并初始化了两个变量。

printf("%d %d %d\n", x, y, z);
printf("%f %f\n", w, h);

我们打印这五个变量的值。

x = 55;

我们将一个新值赋给 x 变量。

$ ./simple
5 6 7
4.500000 5.500000
55

C 变量初始化

在下一个示例中,我们将展示 C 变量初始化的几种方法。

init.c
#include <stdio.h>

int main() {

    int x, y = 5;

    printf("x: %d\n", x);
    printf("y: %d\n", y);

    int m = 6, n = 7;

    printf("m: %d\n", m);
    printf("n: %d\n", n);

    int v, w;

    v = w = 8;
    printf("v: %d\n", v);
    printf("w: %d\n", w);
}

我们有六个整数变量。

int x, y = 5;

在这一行,我们定义了两个整数变量。y 被赋值为 5。

x 变量的值是未定义的;即,它取决于所使用的编译器。在我们的例子中,x 被赋值为 0,但其他编译器可能会赋一些随机值。最佳实践是避免此类定义,并始终显式定义变量。

int m = 6, n = 7;

这是定义和初始化变量的一次性方法。

int v, w;

我们定义了两个整数。

v = w = 8;

我们将值 8 赋给两个变量。

$ ./init
x: 0
y: 5
m: 6
n: 7
v: 8
w: 8

C 局部变量

C 局部变量在函数的作用域内定义。局部变量仅在其定义的函数内有效。

local_var.c
#include <stdio.h>

int max(int, int);

int main() {

    int x = 4;
    int y = 5;

    printf("%d + %d = %d\n", x, y, x + y);

    int _max = max(x, y);
    printf("%d\n", _max);
}

int max(int x, int y) {

    return x > y ? x : y;
}

我们在 mainmax 函数中定义了两对 xy 变量。这些变量不会冲突,因为它们仅在其函数的体内部有效。

$  ./local_var
4 + 5 = 9
5

C 全局变量

全局变量是在函数外部定义的变量。它在所有函数中都可以访问。全局变量应谨慎使用。

global_var.c
#include <stdio.h>

void f();

int x = 10;

int main() {

    printf("x: %d\n", x);
    x = 11;

    printf("x: %d\n", x);

    f();

    printf("x: %d\n", x);
}

void f() {

    printf("x: %d\n", x);
    x = 12;
    printf("x: %d\n", x);
}

我们定义了一个全局变量 x。我们可以在 mainf 函数中访问和修改它。

$ ./global_var
x: 10
x: 11
x: 11
x: 12
x: 12

C 静态局部变量

静态局部变量只初始化一次,并且在函数调用之间保留其值。

static_var.c
#include <stdio.h>

void f();

int main() {

    f();
    f();
    f();
    f();
    f();
    f();
}

void f() {

    static int n = 0;
    int c = 0;

    n++;
    c++;

    printf("n: %d, c: %d\n", n, c);
}

我们在 f 函数内部定义了一个静态局部变量 n 和一个普通的局部变量 c。我们多次调用 f 函数。每次调用函数时,我们都会递增变量。

$ ./static_var
n: 1, c: 1
n: 2, c: 1
n: 3, c: 1
n: 4, c: 1
n: 5, c: 1
n: 6, c: 1

n 变量的值增加时,c 变量始终为 1。

C 变量 - 函数参数

值参数在函数调用时产生。它用调用中给出的参数值进行初始化。

function_params.c
#include <stdio.h>

int add(int, int);

int main() {

    printf("%d\n", add(4, 5));
    printf("%d\n", add(8, 9));

    return 0;
}

int add(int x, int y) {

    return x + y;
}

我们有两个函数参数:xy。它们在 add 函数的作用域内有效。

$ ./function_params
9
17

C extern 变量

extern 变量意味着变量在不同的文件中定义。extern 关键字声明了一个变量;它通知编译器该变量存在。但它并没有定义它;即,它在那一点不为变量分配存储空间。

myfile.h
int x = 5;
int y = 6;

myfile.h 文件中,我们定义了两个变量:xy

extern_var.c
#include <stdio.h>
#include "myfile.h"

extern int x;
extern int y;

int main() {

    printf("x: %d\n", x);
    printf("y: %d\n", y);
}

extern_var.c 中,我们打印了来自头文件的 xy 变量。

#include "myfile.h"

首先,我们包含该文件。

extern int x;
extern int y;

我们声明了变量。我们告诉编译器这两个变量是在当前文件之外定义的。

$ ./extern_var
x: 5
y: 6

在本文中,我们学习了如何在 C 语言中使用变量。