1. 指針的的理解:
指針屬於C/C++語言的範疇內的東西,與程序對內存的使用密不可分,先來介紹容易弄混的符號(token),例如有(例子1): int *p; 那麼*p代表什麼、&p代表什麼、p又是什麼?
1.1 理解的基礎:
我們常說變量變量,那變量到底是什麼呢?在編程中,一個變量會涉及到幾個東西token、變量所使用的內存地址、變量的 值。比如我們聲明定義int a=100時,此時系統會在內存裏開闢一塊內存空間,這裏假設爲0x0009,然後把值100用二進制的形式 存放到該地址空間中,這就完成了一個定義的過程。當我們訪問變量時,a這個token表示的是100這個值,&a這個token表示的是0x0009這個地址,實際上它也是一個值。
1.2 回到開始的指針問題
指針無非也是變量,所以該開始的問題也就好理解了,int *p定義了一個指針 **變量**(其實我們可以這麼定義int* p),而符號p表示的是變量的值,&p表示變量的地址,*p(注意*p與int *p的區別)指針變量所指向的內存單元的值。
具體實例
void test_pointer(int *p){
p=(int *)malloc(sizeof(int));
*p=100;
}
int main(){
int *ptr;
test_pointer(ptr); //傳值來傳參
printf("%d\n",*ptr); //輸出100
printf("%d\n",ptr); //輸出實參ptr的值,也即該指針所指向的地址(malloc分配)
printf("%d\n",&ptr); //該實參ptr自身的內存地址
}
================================================================================================
2. 指針數組與數組指針:
指針數組:指向某一個數組的指針,如表達式int (*p)[5],“()”的優先級比“[]”優先級高,所以表達式表示有一個整型數組裏有5個元素,有一個指針p指向該數組;
數組指針:由多個指針組成的數組,即數組裏的元素類型爲指針類型,例如表達式int *p[5],“[]”優先級高,表示有一個數組存放5個元素,每個元素爲一個整型指針(指向整數的指針)。