/

C指標介紹

C指標介紹

C指標介紹

在我看來,指標是C語言中最令人困惑/挑戰的部分之一。特別是對於新手程序員來說,但即使你來自於像Python或JavaScript這樣的高階編程語言,也一樣如此。

在這篇文章中,我想以最簡單但不過度簡化的方式來介紹它們。

指標是一個存儲變量內容的內存塊的地址。

當你聲明一個整數變量,像這樣:

1
int age = 37;

我們可以使用&操作符來獲取變量在內存中的地址:

1
printf("%p", &age); /* 0x7ffeef7dcb9c */

我在printf()中使用了%p格式來打印地址值。

我們可以將地址賦值給一個變量:

1
int *address = &age;

在聲明中使用int *address,我們沒有聲明一個整數變量,而是聲明了一個指向整數的指標

我們可以使用指標運算符*來獲取地址指向的變量的值:

1
2
3
int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */

這一次我們再次使用了指標運算符,但這次不是聲明,而是表示“這個指針指向的變量的值”。

在這個例子中,我們聲明了一個age變量,並使用指標來初始化其值:

1
2
3
4
int age;
int *address = &age;
*address = 37;
printf("%u", *address);

在使用C語言時,你會發現很多事情都是基於這個簡單的概念構建的,所以請確保你能夠稍微熟悉一下,通過在你自己的編程環境中運行上述示例來實踐一下。

指標是一個很好的機會,因為它們強迫我們思考內存地址和數據的組織方式。

數組就是一個例子。當你聲明一個數組時:

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

prices變量實際上是指向數組第一個項目的指標。在這種情況下,你可以使用以下printf()函數獲取第一個項目的值:

1
printf("%u", *prices); /* 5 */

酷的是,我們可以通過將1添加到prices指針中來獲取第二個項目:

1
printf("%u", *(prices + 1)); /* 4 */

以此類推,對於所有其他的值也是如此。

我們也可以進行許多優秀的字符串操作,因為字符串在內部實際上是一個數組。

還有許多其他應用程序,包括傳遞對象或函數的引用以避免消耗更多資源複製它。