プロが教える店舗&オフィスのセキュリティ対策術

初心者です。
ローカル関数でポインタを引数で使用する場合の定義で
int A (int *x,int *y) とする場合の*はポインタの宣言としての*なのでしょうか?
これまでの例題ではメイン関数のなかでポインタを宣言しアドレスを代入し・・・という使い方だったのですがローカル関数で引数を使用するさいはメイン関数内ではポインタの宣言はないので関数の定義と同時にint *x とint *yを宣言するという事なのでしょうか?
それ以降の*は間接参照演算子ですね。

A 回答 (3件)

> int A (int *x,int *y) とする場合の*はポインタの宣言としての*なのでしょうか?


ポインタ変数の宣言です。関数が引用されたとき、仮引数として宣言した変数には、実引数の値が初期値として入っています。

> それ以降の*は間接参照演算子ですね。
 そのとおりです。ポインタ変数の前に*をつけて式の中で使っていたら、その*は間接参照演算子です。
    • good
    • 0
この回答へのお礼

関数の定義で宣言すれば関数内で宣言はいらないわけですか。
呼び出しの際の引数がそのまま代入されるということですね。
なんとなくイメージがつかめてきた様な気はします。

お礼日時:2009/02/27 22:49

>void func(int *x,int *y)の時点でint *x と int *y を宣言しているということなのだと解釈しています



そのxとyが、ともにint型へのポインタです。そして、

>t = *x, *x = *y, *y = t;

ここでの*xや*yは、xやyに入っている値(アドレス)の場所を参照しています。
    • good
    • 0
この回答へのお礼

そうですよね。ポインタはややこしいですよね。回答ありがとうございます。

お礼日時:2009/03/04 22:56

このようなサンプルで、動きが体感できるでしょうか。



#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;
}
    • good
    • 0
この回答へのお礼

入れ替えの動作ですよね。この場合どこでポインタの宣言をしたんだ?と疑問に思っていました。このサンプルだとvoid func(int *x,int *y)の時点でint *x と int *y を宣言しているということなのだと解釈していますがそういうものなんですよね?

お礼日時:2009/02/27 22:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!