C指標介紹
在我看來,指標是C語言中最令人困惑/挑戰的部分之一。特別是對於新手程序員來說,但即使你來自於像Python或JavaScript這樣的高階編程語言,也一樣如此。
在這篇文章中,我想以最簡單但不過度簡化的方式來介紹它們。
指標是一個存儲變量內容的內存塊的地址。
當你聲明一個整數變量,像這樣:
int age = 37;
我們可以使用&
操作符來獲取變量在內存中的地址:
printf("%p", &age); /* 0x7ffeef7dcb9c */
我在printf()
中使用了%p
格式來打印地址值。
我們可以將地址賦值給一個變量:
int *address = &age;
在聲明中使用int *address
,我們沒有聲明一個整數變量,而是聲明了一個指向整數的指標。
我們可以使用指標運算符*
來獲取地址指向的變量的值:
int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */
這一次我們再次使用了指標運算符,但這次不是聲明,而是表示“這個指針指向的變量的值”。
在這個例子中,我們聲明了一個age
變量,並使用指標來初始化其值:
int age;
int *address = &age;
*address = 37;
printf("%u", *address);
在使用C語言時,你會發現很多事情都是基於這個簡單的概念構建的,所以請確保你能夠稍微熟悉一下,通過在你自己的編程環境中運行上述示例來實踐一下。
指標是一個很好的機會,因為它們強迫我們思考內存地址和數據的組織方式。
數組就是一個例子。當你聲明一個數組時:
int prices[3] = { 5, 4, 3 };
prices
變量實際上是指向數組第一個項目的指標。在這種情況下,你可以使用以下printf()
函數獲取第一個項目的值:
printf("%u", *prices); /* 5 */
酷的是,我們可以通過將1添加到prices
指針中來獲取第二個項目:
printf("%u", *(prices + 1)); /* 4 */
以此類推,對於所有其他的值也是如此。
我們也可以進行許多優秀的字符串操作,因為字符串在內部實際上是一個數組。
還有許多其他應用程序,包括傳遞對象或函數的引用以避免消耗更多資源複製它。