C指針介紹

C指針簡介

指針是以下方面最令人困惑/最具挑戰性的部分之一C, 在我看來。尤其是如果您不熟悉編程,但是如果您來自更高級別的編程語言(例如Python或JavaScript)。

在這篇文章中,我想以最簡單但不模糊的方式介紹它們。

指針是包含變量的內存塊的地址。

當您聲明這樣的整數時:

int age = 37;

我們可以使用&運算符,用於獲取變量存儲器中的地址值:

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

我用了%p指定的格式printf()打印地址值。

我們可以將地址分配給變量:

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 */

對於所有其他值,依此類推。

我們還可以執行許多不錯的字符串操作操作,因為字符串是內部的數組。

我們還有更多的應用程序,包括傳遞對像或函數的引用,以避免浪費更多的資源來複製它。

免費下載我的C手冊


更多clang教程: