C 指標
建立指標
您在上一個章節中瞭解到,可以使用引用運算子 &
來獲取變數的記憶體地址。
示例
int myAge = 43; // 一個 int 變數
printf("%d", myAge); // 輸出 myAge 的值 (43)
printf("%p", &myAge); // 輸出 myAge 的記憶體地址 (0x7ffe5367e044)
自己動手試一試 »
指標是一個變數,它儲存另一個變數的記憶體地址作為其值。
一個指標變數指向與它型別相同的資料型別(如 int
),並使用 *
運算子建立。
您正在處理的變數的地址被分配給指標。
示例
int myAge = 43; // 一個 int 變數
int* ptr = &myAge; // 一個指標變數,名為 ptr,它儲存 myAge 的地址
// 輸出 myAge 的值 (43)
printf("%d\n", myAge);
// 輸出 myAge 的記憶體地址 (0x7ffe5367e044)
printf("%p\n", &myAge);
// 使用指標輸出 myAge 的記憶體地址 (0x7ffe5367e044)
printf("%p\n", ptr);
自己動手試一試 »
示例說明
建立一個名為 ptr
的指標變數,它指向一個 int
變數(myAge
)。請注意,指標的型別必須與您正在處理的變數的型別(在本例中為 int
)相匹配。
使用 &
運算子來儲存 myAge
變數的記憶體地址,並將其分配給指標。
現在,ptr
儲存 myAge
記憶體地址的值。
解引用
在上面的示例中,我們使用指標變數來獲取變數的記憶體地址(與 &
引用運算子一起使用)。
您還可以透過使用 *
運算子(解引用運算子)來獲取指標指向的變數的值。
示例
int myAge = 43; // 變數宣告
int* ptr = &myAge; // 指標宣告
// 引用:使用指標輸出 myAge 的記憶體地址 (0x7ffe5367e044)
printf("%p\n", ptr);
// 解引用:使用指標輸出 myAge 的值 (43)
printf("%d\n", *ptr);
自己動手試一試 »
請注意,這裡的 *
符號可能會造成混淆,因為它在我們的程式碼中做了兩件事:
- 當用於宣告時(
int* ptr
),它會建立一個指標變數。 - 當不用於宣告時,它充當解引用運算子。
知識點:在 C 語言中宣告指標變數有兩種方式:
int* myNum;
int *myNum;
關於指標的注意事項
指標是 C 語言區別於其他程式語言(如 Python 和 Java)的一個重要特性。
它們在 C 語言中很重要,因為它們允許我們操作計算機記憶體中的資料。這可以減少程式碼量並提高效能。如果您熟悉列表、樹和圖等資料結構,您應該知道指標在實現這些結構時特別有用。有時您甚至必須使用指標,例如在使用 檔案和 記憶體管理時。
但要小心;指標必須謹慎處理,因為有可能損壞儲存在其他記憶體地址中的資料。