- ベストアンサー
ポインタを引数で使用する場合
初心者です。 ローカル関数でポインタを引数で使用する場合の定義で int A (int *x,int *y) とする場合の*はポインタの宣言としての*なのでしょうか? これまでの例題ではメイン関数のなかでポインタを宣言しアドレスを代入し・・・という使い方だったのですがローカル関数で引数を使用するさいはメイン関数内ではポインタの宣言はないので関数の定義と同時にint *x とint *yを宣言するという事なのでしょうか? それ以降の*は間接参照演算子ですね。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> int A (int *x,int *y) とする場合の*はポインタの宣言としての*なのでしょうか? ポインタ変数の宣言です。関数が引用されたとき、仮引数として宣言した変数には、実引数の値が初期値として入っています。 > それ以降の*は間接参照演算子ですね。 そのとおりです。ポインタ変数の前に*をつけて式の中で使っていたら、その*は間接参照演算子です。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
>void func(int *x,int *y)の時点でint *x と int *y を宣言しているということなのだと解釈しています そのxとyが、ともにint型へのポインタです。そして、 >t = *x, *x = *y, *y = t; ここでの*xや*yは、xやyに入っている値(アドレス)の場所を参照しています。
お礼
そうですよね。ポインタはややこしいですよね。回答ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
このようなサンプルで、動きが体感できるでしょうか。 #include <stdio.h> void func(int *x, int *y) { int t; t = *x, *x = *y, *y = t; } int main(void) { int a = 100, b = 200; printf("【入れ替え前】\n"); printf("a=%d b=%d\n", a, b); func(&a, &b); printf("【入れ替え後】\n"); printf("a=%d b=%d\n", a, b); return 0; }
お礼
入れ替えの動作ですよね。この場合どこでポインタの宣言をしたんだ?と疑問に思っていました。このサンプルだとvoid func(int *x,int *y)の時点でint *x と int *y を宣言しているということなのだと解釈していますがそういうものなんですよね?
お礼
関数の定義で宣言すれば関数内で宣言はいらないわけですか。 呼び出しの際の引数がそのまま代入されるということですね。 なんとなくイメージがつかめてきた様な気はします。