C言語のポインタについて質問があります。
下記プログラムを実行したところ、実行結果として
初期-> x:10 y:20
初期アドレス-> x:0x7ffee830a998 y:0x7ffee830a994
get_xy: x..0x7ffee830a998, y..0x7ffee830a994
get_xy: &x..0x7ffee830a968, &y..0x7ffee830a960
関数実行後-> x:1, y:2
が得られました。
ここで質問なのですが、get_xy関数の引数x,yについて
アドレスと中身を表示するためにprintfを用いていますが、
なぜ&演算子が出てくるのでしょうか。
intのポインタ型としてint *x,int yと定義されているため、確保されたアドレスを見るときは
そのままx,yとし、中身を見るときはx, *yではないのでしょうか。
&演算子が出てくるのは、普通にint x, int yと定義したときに出てくるイメージなのですが…。
しかしこれでコンパイルは通るので、どこの理解が間違っているのかが分かりません。
void get_xy(int *x, int *y){ printf("get_xy: x..%p, y..%p\n", (void *)x, (void *)y); printf("get_xy: &x..%p, &y..%p\n", (void *)&x, (void *)&y); *x = 1; *y = 2; } int main(){ int x = 10; int y = 20; printf("初期-> x:%d y:%d\n",x, y); printf("初期アドレス-> x:%p y:%p\n", &x, &y); get_xy(&x, &y); printf("関数実行後-> x:%d, y:%d\n",x,y); return 0; }
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。