雙重指標

指標可用來儲存某變數的記憶體位址,本身也是一個變數,也要佔有記憶體空間才能儲存資訊,使用&運算子可讓我們得到指標的位址。以下的程式碼可看出變數的位址、指標儲存的值以及指標的位址,位址會依實際情況而不同,但是指標儲存的值都會等於變數位址。

int main() {
    intp = 10; 
    int *ptr = &p; 

    intaddr1 =  (int)&p;     //addr1=2162196
    intaddr2 =  (int)ptr;    //addr2=2162196
    intaddr3 =  (int)&ptr;   //addr3=2162184
    return 0; 
}

假使要儲存ptr的位址,如同int由int指標儲存位址,所以int型態就必須由int來存位址。以下的程式碼可看出ptr1儲存了p變數的位址,ptr2儲存了ptr1的位址,*ptr2取出的是ptr1所儲存的值,也就是&p,使用ptr2時,因為*ptr2 == ptr1,所以*(*ptr2 ) == *ptr1,而*ptr1 == p,所以也就是取出p的值了。

int main() {
    intp = 10; 
    int *ptr1 = &p; 
    int **ptr2 = &ptr1; 

    intaddr1 =  (int)&p;     //addr1=2291940
    intaddr2 =  (int)ptr1;   //addr2=2291940
    intaddr3 =  (int)&ptr1;  //addr3=2291928
    intval =    **ptr2;      //val=10
    intaddr4 =  (int)*ptr2;  //addr2=2291940
    intaddr5 =  (int)&ptr2;  //addr3=2291916

    return 0; 
}