インクリメントの位置と配列【 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;

となります。

 

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

 

2018/04/14追記
今見るとトンデモナイ勘違いしてたんやなぁ。
それにしても読みづらい。

Comments...

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

Write a Comment

コメント時の注意

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