2016-05-12 190 views
-2
struct Book { 
    int i; 
} variable, *ptr; 

在訪問結構承包商,客人,我們使用variable.i或ptr->我 我的問題是什麼之間/使用的變量和* PTR使用結構指針和結構變量有什麼區別?

+0

'ptr'是未初始化的,因此通過它的任何訪問('*'或' - >')都將具有UB。這是你的意思嗎? – edmz

+1

[C++中的指針變量和引用變量之間的區別是什麼?]可能的重複(http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-和-a-reference-variable-in) – Turtle

+0

謝謝你的迴應。對不起,我沒有得到你。如果可能的話,你能否清楚地解釋一下它? – Lokesh

回答

2

試想一隻狗的區別。

現在想象一條狗皮帶。

現在想象一下狗,夾在皮帶上。

皮帶代表狗的指針。如果你創建一個指針(皮帶)並且不要也有有一個指向(狗)的結構,那麼你不能去公園玩飛盤。

如果你有一個結構,但沒有指針,你仍然可以做很多事情。

使用指針需要具有指向的結構。您可以聲明結構,然後使用&操作指向它,或者你可以調用像malloccalloc函數將返回動態分配的內存可以作爲結構用:

void demo() { 
    struct Book b1; 
    struct Book b2; 

    typedef struct Book * Bookptr; 

    Bookptr p; 

    // Assign pointer to existing object using address operator: 

    p = &b1; 
    p->i = 10; 
    p = &b2; 
    p->i = 12; 
    printf("Book 1 has i: %d, while Book 2 has i: %d\n", b1.i, b2.i); 

    // Use dynamically allocated memory 
    p = calloc(1, sizeof(struct Book)); 
    p->i = 3; 
    printf("Dynamic book has i: %d\n", p->i); 
    free(p); 
} 
+1

嗯 - 所以人們可以有1)在皮帶上的狗2)皮帶和沒有狗(晃來晃去的指針)3)綁在[南極]上的皮帶(https://en.wikipedia.org/wiki/South_Pole #Ceremonial_South_Pole)(空指針​​)或者4)狗不在皮帶上(內存泄漏)。 ;-) – chux

+0

:-)這很酷... – Lokesh

+0

謝謝@奧斯汀...我知道了 – Lokesh

0

variable將具有與其關聯的內存,因此可以在創建時直接訪問。因爲存儲器在編譯時給出的,所述.裝置可以直接查找在結構中的值,而無需做任何類型的在直接跳躍的編譯器

ptr將僅是指向存儲器並且不能被使用,直到指向有內存的東西(或通過動態內存分配給出內存)。->表示編譯器必須先讀取內存然後跳轉到該位置。

+0

謝謝邁克爾的澄清 – Lokesh