struct Book {
int i;
} variable, *ptr;
在訪問結構承包商,客人,我們使用variable.i或ptr->我 我的問題是什麼之間/使用的變量和* PTR使用結構指針和結構變量有什麼區別?
struct Book {
int i;
} variable, *ptr;
在訪問結構承包商,客人,我們使用variable.i或ptr->我 我的問題是什麼之間/使用的變量和* PTR使用結構指針和結構變量有什麼區別?
試想一隻狗的區別。
現在想象一條狗皮帶。
現在想象一下狗,夾在皮帶上。
皮帶代表狗的指針。如果你創建一個指針(皮帶)並且不要也有有一個指向(狗)的結構,那麼你不能去公園玩飛盤。
如果你有一個結構,但沒有指針,你仍然可以做很多事情。
使用指針需要具有指向的結構。您可以聲明結構,然後使用&
操作指向它,或者你可以調用像malloc
或calloc
函數將返回動態分配的內存可以作爲結構用:
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);
}
variable
將具有與其關聯的內存,因此可以在創建時直接訪問。因爲存儲器在編譯時給出的,所述.
裝置可以直接查找在結構中的值,而無需做任何類型的在直接跳躍的編譯器
ptr
將僅是指向存儲器並且不能被使用,直到指向有內存的東西(或通過動態內存分配給出內存)。->
表示編譯器必須先讀取內存然後跳轉到該位置。
謝謝邁克爾的澄清 – Lokesh
'ptr'是未初始化的,因此通過它的任何訪問('*'或' - >')都將具有UB。這是你的意思嗎? – edmz
[C++中的指針變量和引用變量之間的區別是什麼?]可能的重複(http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-和-a-reference-variable-in) – Turtle
謝謝你的迴應。對不起,我沒有得到你。如果可能的話,你能否清楚地解釋一下它? – Lokesh