在 C 語言中使用指標 & 符號
Jinku Hu
2023年10月12日
本文將介紹在 C 語言中如何使用指標 &
符號的多種方法。
使用&var
符號獲取給定變數的地址
指標只是持有記憶體地址的變數。它們用 type *var
符號來宣告。指標可以被分配給任何相同型別的地址,任何指標型別都可以儲存 void*
指標,它被稱為通用指標。既然我們有一個儲存物件地址的型別,就應該有一個操作符提供對一個物件的訪問。
&
作為一元運算子,通常被稱為取址運算子。它可以用於資料物件和函式上,以檢索物件的儲存地址。
假設我們宣告並初始化了一個整數 x
,如下例所示。在這種情況下,我們可以用取址運算子&
取其地址,並將其分配給 int *xptr
變數。因此,xptr
指向的值是 10233,在後續的程式碼中可以利用運算子*
來訪問它的值。
注意,星號*
在這裡有兩種不同的情況下使用。一個是宣告一個指標型別的變數。另一個是用來從指標訪問變數的值,後一種情況叫做去引用。
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10233;
int *xptr = &x; // xptr now points to x
printf("x: %d\n", x);
printf("*xptr: %d\n", *xptr);
exit(EXIT_SUCCESS);
}
輸出:
x: 10233
*xptr: 10233
使用*ptr
符號從指標訪問變數的值
可以利用去引用操作符從指標中獲取值,並將它們分配給相同型別的變數。請注意,*
操作符不能用於 null
或無效指標,因為它會導致未定義的行為。在大多數情況下,如果嘗試使用 null
指標,程式很可能會崩潰。但如果訪問無效指標,可能會被忽略。無效指標可能指向記憶體中的某個任意物件,對它的操作仍然會進行,但它可能會破壞程式狀態的正確性。
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10233;
int *xptr = &x; // xptr now points to x
int y = *xptr; // y now holds the value 10233
printf("x: %d\n", x);
printf("y: %d\n", y);
exit(EXIT_SUCCESS);
}
輸出:
x: 10233
y: 10233
使用&
符號向函式傳遞物件的地址
利用取址運算子的最常見的例子是傳遞一個指向物件的指標作為函式引數。下面的例子演示了 swap
函式,它將兩個整數指標作為引數。請注意,當從 main
函式中呼叫 swap
時,使用了&
運算子來傳遞 x
和 y
變數的地址。不過請注意,swap
函式主體中的*
運算子表示指標的去引用。
#include <stdio.h>
#include <stdlib.h>
void swap(int *x, int *y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int x = 10233;
int y = 10133;
printf("x:%d, y:%d\n", x, y);
swap(&x, &y);
printf("x:%d, y:%d\n", x, y);
exit(EXIT_SUCCESS);
}
輸出:
x:10233, y:10133
x:10133, y:10233
作者: Jinku Hu