【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】

xを変数名を引数として渡し、yをアドレス引数として渡します。
関数 func_add内で1を加算します。
以下のソースコードで大丈夫ですか。
大略のみ書いており、細かな部分は削除しています。

void func_add(int x, int *y)
{
x = x + 1;
&y = &y + 1;
}

int main(void)
{
int x = 1, y = 1;

printf("x = %d\n", x); →xに格納されている値を出力する
printf("y = %d\n", y); →yに格納されている値を出力する

func_add(x, &y);

return 0;

}

A 回答 (4件)

駄目ですね。


>void func_add(int x, int *y)
>{
> x = x + 1;
> &y = &y + 1;
>}

x = x + 1;

引数はローカル変数の一種なので、これでは結果が
どこにも残らない。まあ x を使うコードが省略されているのかも
しれないけど。

&y = &y + 1;

これはコンパイルエラーになるはず。
ポインタ値は左辺値(変数のようなもの)
じゃないからね。

これは
*y = *y + 1;

のつもりかな?
    • good
    • 0

> xを変数名を引数として渡し、yをアドレス引数として渡します。


文字通りの意味で「変数名を引数として渡す」は不可能ですし、
「アドレス引数」というものはありません。

お書きのコードでなされているのは、
・変数の値を引数として渡す(xのこと)
・変数のアドレスを引数として渡す(&yのこと)
です。
お書きのコードだと、
・xに1を、yにも1を代入
・その値つまり1をprintfで2回出力
・関数を第一引数を1、第二引数をyのアドレスで呼び出す
・呼び出された関数で、
・仮引数の第一引数に1を足す(これはmainのxとは無関係)
・仮引数の第二引数であるアドレスの変数に1を足す(つまりyに1を足す)
ですね。
    • good
    • 0

func_add()に渡している第一引数の意味は?


元のソースの場合、xに1加算しても関数を抜けた瞬間に何も無かったことになります。

yのアドレスを渡して1加算するだけなら以下のようにすれば良いだけ。

void func_add(int *y)
{
*y = *y + 1;
}
    • good
    • 0

func_addを実行してもxは関数内のスコープでいじってるだけだから意味がない。

この関数を実行しても引数xは実行後に変化しない。
yは参照渡しなので関数実行後に変化するが、yの値を1インクリメントしたいなら*y=*y+1の記述にすべき。
    • good
    • 0

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