プログラミングを真面目にやりだしてからまだ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;
となります。
これがわかればナンテコトナイ問題だった!くそう!
参考リンク
Additional Notes追記
今見るとトンデモナイ勘違いしてたんやなぁ。 それにしても読みづらい。
コメントはありません。
現在コメントフォームは工事中です。