- ベストアンサー
仮引数のポインタ変数を関数内で使用してもいい?
お願いします。 下記のように、仮引数のポインタ変数(p)を関数内で作業用に使っても問題ないでしょうか。 少々抵抗があるのですが、こんなことはしちゃ駄目ですか? void xxx ( char * p ) { char *wp = p; p = "aiueo"; printf("%s\n", wp ); printf("%s\n", p ); } 他サイトで同じように質問しましたが、回答がないので こちらで質問させて頂きました。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
仮引数も、その関数内で宣言される変数なので変数として扱えば良い。 他の変数と違うのは、関数が呼び出されたとき該当する実引数で初期化されることだけ。
その他の回答 (5)
- ssk38
- ベストアンサー率44% (22/49)
問題とはなんでしょうか。 ロジック的に問題か→NO 会社のコード規約守ってないから問題?→可読性を殺して守るのは本末転倒だと思うが、守らなければならないのに守ってないなら問題かもね。 可読性低下が問題→処理による。引数は別の変数で使われていて、pは引数の変数なのに全く別の値で使われると、必然性がなかったら混乱するので問題になりうる。 必然性がないのに、そういうことする事情があるならコメントに書いてあれば、問題はないかもしれない。 しかし、質問者の示したコードそのものは代入が無駄に2つあるので無駄に見えるし気持ち悪いことは確か。
お礼
ありがとうございます。仮引数のポインタ変数を関数内で いじりまわしてもいいかどうかを表現しようとしてあげた 例でしたがわかりにくくてすみませんでした。
- asuncion
- ベストアンサー率33% (2127/6290)
さっきの回答だけではナニですので、本題にも触れましょうか。 xxx() を呼び出す側のコードは、どういう内容を想定してますか?
お礼
ありがとうございます。仮引数のポインタ変数を関数内で いじりまわしてもいいかどうかを表現しようとしてあげた 例でしたがわかりにくくてすみませんでした。 他の方に教えていただきましたので結構です。
- asuncion
- ベストアンサー率33% (2127/6290)
>他サイトで同じように質問しましたが、回答がないので 回答がないって、質問からたったの1時間しかたってませんよね。 2日も3日もほっとかれるんならともかく、もうちょっと気長に待ちましょうよ。
お礼
ありがとうございます。すぐにでも必要でしたのでこちら で質問させていただきました。
- yaemon_2006
- ベストアンサー率22% (50/220)
>該当する実引数で 該当する実引数の値で
- kmee
- ベストアンサー率55% (1857/3366)
ポインタも変数の一種ですから、この例では問題ありません。 *p にアクセスするなら注意が必要ですが。 strcpy相当の関数で void mystrcpy(char *src,char *dst ){ while(*src != '\0' ) { *dst = *src ; dst++;src++; } *dst='\0'; } みたいな使い方はよくあります。 もっとも、保守を考えれば、例示されているプログラムでは char *wp="aiueo"; として、pはそのままにするべきだと思います。
お礼
ありがとうございます。仮引数のポインタ変数を関数内で いじりまわしてもいいかどうかを表現しようとしてあげた 例でしたがわかりにくくてすみませんでした。
お礼
ありがとうございます。仮引数のポインタ変数を関数内で いじりまわしてもいいかどうかを表現しようとしてあげた 例でしたがわかりにくくてすみませんでした。