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