計劃:指針和C內存分配
int x;
int *y;
int **z;
z = (int **) malloc (sizeof(int *));
y = (int *) malloc (sizeof(int));
x = 1;
*z = &x;
*y = x;
.
.
.
問題: 之間有什麼區別:從我瞭解* Z點x和* Y點的地址
*z = &x;
*y = x;
到x,但是* y指向x不需要x的地址?我真的不明白這兩個變量是怎麼回事。
編輯: 我也想知道我們什麼時候知道什麼時候在堆棧或堆上分配變量?
- 爲什麼x,y和z分配在堆棧上?
- 爲什麼* y,** y,* z,** z分配在堆上?
最後,改變* z,改變** z?
「根據我的理解......」你誤解了。 z和y仍然指向您分配它們時指向的任何內存塊。 – 2013-05-12 14:20:41
您不應該在C中使用'malloc()'的返回值。這將有助於識別沒有原型的錯誤。 – jxh 2013-05-12 14:22:09
首先,你需要明白,最後兩條陳述完全不同。第一個將x的*地址*賦給任意z指向的元素,而第二個賦予x的*值*給y指向的任何東西。如果您指定一個值,則原件和副本將變爲「斷開連接」,以便更改一個不會更改另一個值。但是,當你只使用地址,然後兩個在臀部加入 - 改變一個,你改變另一個。 – 2013-05-12 14:27:44