指針與多維度數組在 C 語言中
你好啊,未來的編程超新星!? 我很高興能成為你探索指針和多維度數組世界的導師。作為一個教了多年編程的人,我可以向你保證,雖然這些概念起初可能看起來有點複雜,但一旦你掌握了要領,它們其實非常迷人。那麼,我們來開始吧!
指針與一維數組
在我們深入多維度數組之前,讓我們從基礎開始:指針和一維數組。這兩個概念在 C 語言中密切相關,理解它們之間的關係至關重要。
什麼是指針?
指針是一個存儲另一個變量記憶地址的變量。把它想象成一個指向你計算機記憶中數據存儲位置的指示牌。以下是如何聲明和使用指針的方式:
int number = 42;
int *ptr = &number;
printf("Value of number: %d\n", number);
printf("Address of number: %p\n", (void*)&number);
printf("Value of ptr: %p\n", (void*)ptr);
printf("Value ptr is pointing to: %d\n", *ptr);
在這個例子中,ptr
是一個指針,它持有 number
的地址。&
運算符給我們變量的地址,而 *
運算符(當與指針一起使用時)給我們該地址的值。
數組與指針
現在,這裡有點意思了。在 C 語言中,數組的名稱實際上是指向其第一個元素的指針!讓我們看看這是怎麼工作的:
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr; // 不需要使用 &, arr 已經是一個指針!
printf("First element using array notation: %d\n", arr[0]);
printf("First element using pointer notation: %d\n", *p);
// 我們可以使用指針算術來訪問其他元素
printf("Third element using pointer arithmetic: %d\n", *(p + 2));
這不是很酷嗎?我們可以像使用指針一樣使用 arr
,因為在某種程度上,它就是一個指針!
指針與二維數組
現在我們已經掌握了基礎知識,讓我們升級到二維數組。這些就像表格或網格,有行和列。
聲明二維數組
這是我們如何聲明和初始化一個二維數組的方式:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
這創建了一個 3x4 的整數網格。但這與指針有什麼關係?
二維數組與指針
一個二維數組實際上是一個指針數組,其中每個指針指向一個一維數組。讓我們分解一下:
int (*p)[4] = matrix;
printf("First element: %d\n", matrix[0][0]);
printf("Same element using pointer: %d\n", **p);
// 訪問其他元素
printf("Element at row 1, column 2: %d\n", matrix[1][2]);
printf("Same element using pointer: %d\n", *(*(p + 1) + 2));
在這個例子中,p
是一個指向 4 個整數數組的指針。每個 p + i
給我們一個指向行的指針,然後我們可以訪問該行中的單個元素。
指針與三維數組
準備好迎接最終大boss了嗎?三維數組!這些就像一堆二維數組。想象一個由數字組成的立方體。
聲明三維數組
這是我們如何聲明和初始化一個三維數組的方式:
int cube[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};
這創建了一個 2x3x4 的整數立方體。
三維數組與指針
就像二維數組一樣,我們可以使用指針來導航我們的三維數組:
int (*p)[3][4] = cube;
printf("First element: %d\n", cube[0][0][0]);
printf("Same element using pointer: %d\n", ***p);
// 訪問其他元素
printf("Element at layer 1, row 2, column 3: %d\n", cube[1][2][3]);
printf("Same element using pointer: %d\n", *(*(*(p + 1) + 2) + 3));
在這裡,p
是一個指向 3x4 數組的指針。每個層級的 *
轉換一個維度的數組。
結論
我們已經介紹了很多內容,從簡單的指針到複雜的三維數組。記住,掌握這些概念關鍵在於練習。嘗試自己寫代碼,嘗試不同的數組大小,並不要害怕犯錯誤——這是我們學習的方式!
這裡是一個我們所涵蓋的指針表示法的快速參考表:
數組類型 | 聲明 | 指針表示法 |
---|---|---|
一維數組 | int arr[5] |
int *p = arr |
二維數組 | int arr[3][4] |
int (*p)[4] = arr |
三維數組 | int arr[2][3][4] |
int (*p)[3][4] = arr |
持續編程,持續探索,並記住——每個專家都曾經是一個初學者。你可以的!??️
Credits: Image by storyset