うるおいらんど

アプリ開発やサイト制作のメモとか。

インクリメントの位置と配列【 C言語】

魚ライン
魚ライン

プログラミングを真面目にやりだしてからまだ1年経ってないのかな、経ったかな?

FEの午後の過去問をやっているときに触ったことのないC言語(他のC++とかObjective-Cとかはちょいちょい読める)の問題を解いていたときに

pos[i++] = p;

という処理があったんですよ。

私は

i = 0のとき、pos[i++] = p → pos[1] = p

だと思っていたのですが、C言語だからか、意識していなかっただけで他の言語もなのかはわかりませんが、

i = 0のとき、pos[i++] = p → pos[i] = p ; i += 1 →pos[0] = p; i = 0+1 (= 1)

となるのが正しい。ということでした。

 

これを知らなかったと、配列内でのインクリメントが他にも適用されることを知らなかった(pos[i++]となっているとき、posの添え字i++要素のみに適用でその後の処理にはそのままi=0のままだと思っていた)ので過去問を解いているときに、pos[i++] = pの後にif(i == 2)の処理があるのですが、いつまでたってもiが0のままで、全然問題が解けないということに陥ってしまってました。

 

またインクリメント・デクリメントには、前置きと後置きがあり、私が他の言語でよく使用していたのは、後置きインクリメントでした。

i++(後置き)

++i(前置き)

そして

i = 0;pos[++i] = p;の場合はpos[1] = p;

i=0;pos[i++] = p;の場合にはpos[0] = p;i+=1;

となります。

 

これがわかればナンテコトナイ問題だった!くそう!

参考

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12151492522

 

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

その他の記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン