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 語句。當你想要根據一個條件賦值時,它非常合適。這是語法:

條件 ? 真值 : 假值

讓我們看一個例子:

#include <stdio.h>

int main() {
int age = 20;
char *status = (age >= 18) ? "成人" : "未成年";

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

return 0;
}

輸出:

在 20 歲,你是一個 成人。

這不是很棒嗎?就像提一個問題並得到兩個可能的答案!

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