C 语言杂项运算符:初学者的友好指南
你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索 C 语言的杂项运算符世界。如果你是编程新手,不用担心——我会成为你的友好向导,一步步为你解释。那么,让我们开始吧!
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
结构体中的 name
和 age
。
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