C 語言中的指針和數組

Hello, 有志者!今天,我們將踏上一段令人興奮的旅程,探索 C 語言中的指針和數組。別擔心這些術語聽起來讓人卻步 - 在這個教程結束時,你將能夠像專業人士一樣熟練地操作它們!

C - Pointers and Arrays

C 語言中的數組

我們先從數組開始。想像你有一堆玩具車。你決定不是把它們散落在房間各處,而是整齊地排在架子上。在編程中,數組基本上就是這樣的 - 一種以有組織的方式存儲多個同類型項目的方法。

宣告數組

在 C 語言中,我們這樣宣告一個數組:

int numbers[5];

這行代碼創建了一個名為 numbers 的數組,可以存放 5 個整數。這就像說,“我想要一個能夠存放 5 個玩具車的架子。”

我們也可以用值來初始化數組:

int numbers[5] = {1, 2, 3, 4, 5};

這就像一開始就在我們的架子上放置了 5 個特定的玩具車。

讓我們看一個更實際的例子:

#include <stdio.h>

int main() {
int scores[5] = {85, 92, 78, 95, 88};

printf("第三個成績是:%d\n", scores[2]);

return 0;
}

在這個例子中,我們存儲了 5 個測試成績。注意,我們使用 scores[2] 來訪問第三個成績。這是因為在 C 語言中,數組的索引從 0 開始,而不是 1。這有點像在某些國家,一樓被認為是 0 樓,而不是 1 樓。

C 語言中的指針

現在我們來談談指針。如果數組是像架子,那麼指針就像是標籤或標誌,指向事物存儲在記憶中的位置。

指針是一個變量,它存儲另一個變量的記憶地址。這就像有一張地圖,告訴你確切地如何找到某樣東西。

以下是如何宣告一個指針:

int *ptr;

這行代碼創建了一個名為 ptr 的指針,它可以存儲一個整數的地址。

讓我們看一個簡單的例子:

#include <stdio.h>

int main() {
int x = 10;
int *ptr = &x;

printf("x 的值是:%d\n", x);
printf("x 的地址是:%p\n", (void*)ptr);

return 0;
}

在這個例子中,我們創建了一個整數 x 和一個指針 ptr,它存儲 x 的地址。& 運算符用於取得變量的地址。

C 語言中的間接運算符

間接運算符 * 用於訪問指針所持有的地址中的值。這就像使用地圖實際去到那個位置並看看有什麼。

以下是一個例子:

#include <stdio.h>

int main() {
int x = 10;
int *ptr = &x;

printf("x 的值是:%d\n", x);
printf("ptr 指向的值是:%d\n", *ptr);

*ptr = 20;  // 通過指針改變 x 的值

printf("x 的新值是:%d\n", x);

return 0;
}

在這個例子中,我們使用 *ptr 來訪問和通過指針修改 x 的值。

指針和數組

現在看起來真的很有趣了。在 C 語言中,指針和數組之間有著密切的關係。實際上,數組的名稱其實是指向其第一個元素的指針!

讓我們看一個例子:

#include <stdio.h>

int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers;  // ptr 現在指向 numbers 的第一個元素

for(int i = 0; i < 5; i++) {
printf("元素 %d:%d\n", i, *ptr);
ptr++;  // 移動到下一個元素
}

return 0;
}

在這個例子中,我們創建了一個數組和一個指針,指向數組的第一個元素。然後我們使用指針運算來移動並打印每個元素。

注意事項

以下是一些有關 C 語言中指針和數組的重要注意事項:

描述
數組索引 數組索引在 C 語言中從 0 開始
指針宣告 在宣告指針時使用 *(例如,int *ptr;
地址運算符 使用 & 獲取變量的地址
間接運算符 使用 * 访問指針指向的值
數組-指針關係 數組的名稱是指向其第一個元素的指針
指針運算 對指針加 1 將它移動到下一個元素

記住,使用指針需要仔細注意細節。這是 C 語言的一個強大特性,但隨著巨大的力量,也伴隨著巨大的責任!

希望這個教程能夠幫助你解開指針和數組的神秘。持續練習,不久你將能夠像真正的 C 編程員一樣操作記憶。快樂編程!

Credits: Image by storyset