2008-01-05

2次元配列とインクリメントの順序関係


初めて知った。自分的には大発見。 さっそくメモ。

C言語で
以下の5×5の2次元配列src,dstに対して、
[src]
0 3 3 2 9
0 8 2 6 6
9 1 1 3 5
8 3 0 6 9
2 7 7 2 8

[dst]
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

以下の動作を行うと
int a,b
a=0, b=0
dst[++a][++b] = src[++a][++b]; ※1
a=2, b=2
dst[a][b] = 0
dst[++a][++b] = src[++a][++b]; ※2
a=4, b=4
dst[a][b] = 0

※1→ dst[1][1] = src[2][2]となる 
同様にして
※2→ dst[3][3] = src[4][4]となる 

式は、左から右に評価していくので、
インクリメント順番も評価の順番に従って行われる

よって、dstの内容は
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 8 0
0 0 0 0 0
となる。

0 件のコメント: