2016-12-04 53 views
2

如果ptemp是兩個指針變量,其中p包含NULLtemp指向一些內存地址。兩個指針變量可以指向相同的內存地址嗎?

現在假設p = temp;

這意味着現在p指向相同的地址,其中temp指向。

這是否意味着兩個指針變量ptemp現在指向相同的內存地址?

+0

是的,它的確也是指針用例之一。 –

+2

這就像問「兩個整數是否具有相同的值?」 – harold

+0

@harold:這是一個非2s補充體系結構的技巧問題;-) – chqrlie

回答

4

是兩個指針變量可以指向相同的對象:

指針是包含一個C對象的地址,或空指針對象。

  • 多個指針可以指向相同的對象:

    char *p, *q; 
    p = q = "a"; 
    
  • 指針甚至可以指向自身:

    void *p; 
    p = &p; 
    
  • 這裏是雙重鏈接循環列表另一示例與單個元素:nextprev鏈接都指向相同的位置,結構本身:

    struct dlist { 
        struct dlist *prev, *next; 
        int value; 
    } list = { &list, &list, 0 }; 
    
+0

我認爲這隻適用於void指針。是這樣嗎? – lsof

+1

@RajasubaSubramanian:是的,但你有類似的情況與列表鏈接:'struct list {struct list * car,* cdr; } list = {&list,NULL];' – chqrlie

1

是的!多個指針可以指向相同的東西。

0

是2個指針變量可以指向相同的存儲器地址。

我們知道指針是一個包含相同數據類型地址的變量。考慮下面的例子C

#include<stdio.h> 

int main() { 
int a,*pointer1; 
a = 10; 
pointer1 = &a; 
int *pointer2; 

printf("\n Val : %d",*pointer1); //This contains address of the variable a - so accessing it with * prints its value - value of 「a" 
printf("\n Val : %d", *pointer2); //This contains some junk value - so accessing it with * causes segmentation fault - since there might not be memory address with that junk value  

pointer2 = pointer1;    //Now pointer1 reference i.e.; address value stored in pointer1 is made a copy and now both pointer1 and pointer2 will point to the same memory location 
printf("\n Val : %d", *pointer2); //Now this would print the value of 「a" 

return -1; 
} 

這同樣適用於鏈表地址。你的變量「p」和「temp」會指向相同的內存地址!

+0

'* pointer2'不僅僅是*一些垃圾值*,取消引用未初始化的指針會調用未定義的行爲,這意味着程序可能會以各種意想不到的方式失敗。 – chqrlie

+0

當指針2初始化時,會分配一些內存。我們不知道內存位置有什麼價值(我稱之爲垃圾價值)。當我們試圖在pointer2位置中引用值時 - 編譯器認爲它是一個地址值,並嘗試從該位置獲取值(可能會或可能不存在)。 – lsof

+0

來自未知存儲位置的參考值將引發「Segmentaion故障」錯誤。 – lsof

相關問題