C 语言杂项运算符:初学者的友好指南

你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索 C 语言的杂项运算符世界。如果你是编程新手,不用担心——我会成为你的友好向导,一步步为你解释。那么,让我们开始吧!

C - Misc Operators

C 语言中的 sizeof 运算符

想象一下你正在为旅行打包,想知道每件物品占用多少空间。这在 C 语言中 sizeof 运算符的作用基本上就是这样——它告诉我们在程序中事物的尺寸!

sizeof 运算符返回其操作数的大小(以字节为单位)。下面是如何使用它的方法:

#include <stdio.h>

int main() {
int number = 42;
char letter = 'A';

printf("int 的大小:%zu 字节\n", sizeof(int));
printf("char 的大小:%zu 字节\n", sizeof(char));
printf("number 变量的大小:%zu 字节\n", sizeof(number));
printf("letter 变量的大小:%zu 字节\n", sizeof(letter));

return 0;
}

当你运行这段代码时,你将看到类似以下内容:

int 的大小:4 字节
char 的大小:1 字节
number 变量的大小:4 字节
letter 变量的大小:1 字节

如你所见,sizeof 可以用于数据类型和变量。当你需要确切知道你的数据占用了多少内存时,它非常有用!

C 语言中的地址运算符

现在,让我们来谈谈地址运算符,由符号 & 表示。把你的电脑内存想象成一座大型公寓楼。每个公寓(内存位置)都有自己的地址。& 运算符帮助我们找到这些地址!

这里有一个简单的例子:

#include <stdio.h>

int main() {
int age = 25;
printf("age 的值:%d\n", age);
printf("age 的地址:%p\n", (void*)&age);

return 0;
}

这将输出以下内容:

age 的值:25
age 的地址:0x7ffd5e7e9994

确切地址将在你的电脑上有所不同,但你明白了!

C 语言中的解引用运算符

如果地址运算符 (&) 是关于找到某物所在的位置,那么解引用运算符 (*) 就是关于访问那个地址并查看里面有什么。就像是说,“我有这个地址,里面是什么?”

让我们看看它是如何工作的:

#include <stdio.h>

int main() {
int cookies = 5;
int *p_cookies = &cookies;

printf("cookies 的值:%d\n", cookies);
printf("cookies 的地址:%p\n", (void*)&cookies);
printf("p_cookies 的值:%p\n", (void*)p_cookies);
printf("*p_cookies 的值:%d\n", *p_cookies);

return 0;
}

输出:

cookies 的值:5
cookies 的地址:0x7ffd5e7e9994
p_cookies 的值:0x7ffd5e7e9994
*p_cookies 的值:5

看到 *p_cookies 给我们 p_cookies 指向的地址中的值了吗?这就是解引用!

C 语言中的三元运算符

三元运算符就像是一个简写的 if-else 语句。当你想要基于一个条件来赋值时,它非常完美。这是它的语法:

condition ? value_if_true : value_if_false

让我们看一个例子:

#include <stdio.h>

int main() {
int age = 20;
char *status = (age >= 18) ? "adult" : "minor";

printf("在 %d 岁,你是一个 %s。\n", age, status);

return 0;
}

输出:

在 20 岁,你是一个 adult。

这很酷吧?就像问一个问题并得到两个可能的答案!

C 语言中的点 (.) 运算符

点运算符用于访问结构体的成员。把结构体想象成一个容器,可以持有不同类型的多项物品。

这里有一个例子:

#include <stdio.h>

struct Person {
char name[50];
int age;
};

int main() {
struct Person john = {"John Doe", 30};

printf("姓名:%s\n", john.name);
printf("年龄:%d\n", john.age);

return 0;
}

输出:

姓名:John Doe
年龄:30

我们使用点运算符来访问 Person 结构体中的 nameage

C 语言中的间接运算符

间接运算符实际上和前面讨论的解引用运算符 (*) 是一样的。它被称为“间接”运算符,因为它允许我们通过指针间接访问一个值。

这里有一个稍微复杂一点的例子:

#include <stdio.h>

int main() {
int x = 10;
int *p = &x;
int **pp = &p;

printf("x 的值:%d\n", x);
printf("*p 的值:%d\n", *p);
printf(**pp 的值:%d\n", **pp);

return 0;
}

输出:

x 的值:10
*p 的值:10
**pp 的值:10

在这里,我们使用了多级间接引用。pp 是一个指向指针的指针!

就是这样!我们已经覆盖了 C 语言中的所有杂项运算符。记住,熟能生巧,所以不要害怕在你的代码中尝试这些运算符。快乐编码!

运算符 名称 示例 描述
sizeof 大小 sizeof(int) 返回一个类型或变量的大小(以字节为单位)
& 地址-of &variable 返回变量的内存地址
* 解引用 *pointer 访问指针存储的地址中的值
? : 三元 condition ? value1 : value2 简写 if-else 语句
. structure.member 访问结构体的成员
* 间接 *pointer 通过指针访问值

Credits: Image by storyset