2014-10-06 113 views
-3

在下面的代碼中,期望的輸出是1.但它變成了2.引用如何改變?通過使用指針指針來更改引用

#include <stdio.h> 

int main() 
{ 
    int a = 1, b = 2, c = 3; 
    int *ptr1 = &a, *ptr2 = &b, *ptr3 = &c; 
    int **sptr = &ptr1; //-Ref 
    *sptr = ptr2; 
    printf("%d",*ptr1); 
} 
+3

您認爲什麼?爲什麼? – 2014-10-06 11:29:31

+1

你的代碼中沒有引用 - 「&」表示應用於表達式時的「地址」。 – molbdnilo 2014-10-06 11:33:43

+1

「爲什麼」?因爲你剛剛編碼它? – 2014-10-06 11:34:10

回答

1
int main() 
{ 
    int a = 1, b = 2, c = 3; 
    int *ptr1 = &a, *ptr2 = &b, *ptr3 = &c; 

    // ptr1 points to a 
    // ptr2 points to b 



    int **sptr = &ptr1; //-Ref 
    // *sptr points to ptr1 , that means **sptr points indirectly to a 

    *sptr = ptr2; //this translates in ptr1 = ptr2, that means ptr1 points to what ptr2 pointed 
    return 0; 
} 
+0

包含什麼?主要從哪裏回來?如果你把整個代碼,讓它可以接受。 – zoska 2014-10-06 12:19:17

3
int a = 1, b = 2, c = 3; 
int *ptr1 = &a, *ptr2 = &b, *ptr3 = &c; 

ptr1的值是a的地址,ptr2值爲b的地址。

int **sptr = &ptr1; // sptr has address of ptr1 

由於sptr指向ptr1(它的值是ptr1的地址),通過使用*sptr我們可以改變的ptr1值。

*sptr = ptr2; //here we are altering contents of sptr and value of ptr1. 

所以現在ptr1點,其中ptr2一樣。致b = 2;