随手记——神奇的现象,二维数组
Posted czc1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随手记——神奇的现象,二维数组相关的知识,希望对你有一定的参考价值。
做一道DP的题目,需要标记二维数组中,以某个点为中心边上的八个点(象棋中的“马”下一步可走的位置),然后是这样写的。
void make_mark(int x,int y) { sign[x - 1][y - 2] = 1; sign[x - 1][y + 2] = 1; sign[x + 1][y + 2] = 1; sign[x + 1][y - 2] = 1; sign[x + 2][y - 1] = 1; sign[x + 2][y + 1] = 1; sign[x - 2][y - 1] = 1; sign[x - 2][y + 1] = 1; sign[x][y] = 1; }
好像是没什么,但是没有处理下标越界的问题。然后OJ还过了。然后我仔细研究了一下。它们的内存地址是连续的,然后数组等价于指针呐,那就很好理解了。
红线内的1,从上往下是sign[x-2][y-1],sign[x-1][y-2],sign[x+1][y-2],sign[x+1][y+2]。
至于OJ过了的原因,因为我数组开大了几个,这几个 1 没有影响。
除非你能几个数组确保不会越界,不会影响到题目,否则还是好好做越界判断好一点。
以上是关于随手记——神奇的现象,二维数组的主要内容,如果未能解决你的问题,请参考以下文章