プログラム:ポインタとCでのメモリ割り当て
int x;
int *y;
int **z;
z = (int **) malloc (sizeof(int *));
y = (int *) malloc (sizeof(int));
x = 1;
*z = &x;
*y = x;
.
.
.
質問:私は、xと* yのポイントのアドレス* zのポイントを理解して何から
*z = &x;
*y = x;
:違いを何ですか xには向いていますが、* yはxのアドレスを必要としません。私は本当にこれらの2つの変数で何が起こっているのか分かりません。
編集: また、変数がスタックまたはヒープに割り当てられたときはいつ知っていますか?
- x、y、zがスタックに割り当てられるのはなぜですか?
- ヒープ上に* y、** y、* z、** zが割り当てられているのはなぜですか?
最後に、* z、change ** zを変更しますか?
「私が理解したところから...」あなたは誤解しています。 zとyは、割り当てられたときに指し示したメモリブロックを指しています。 –
Cで 'malloc()'の戻り値をキャストすべきではありません。これはプロトタイプがないという不具合を特定するのに役立ちます。 – jxh
まず第一に、最後の2つのステートメントが全く異なることを理解する必要があります。最初のものは、xの*アドレス*をzが指すものに割り当て、2番目のものはxの*値*をyの指すものに割り当てます。値を割り当てると、元のコピーとコピーが「切断された」状態になるので、一方を変更すると他方は変更されません。しかし、あなたがちょうどアドレスを使用すると、2人は股関節に参加し、もう1人はあなたを変えます。 –