我已经看了一段时间了,我对这段代码可以做什么有一些想法,但是我不确定我是否正确理解了这段代码的语法。
代码循环遍历2D无符号字符数组,除非数组中的点表示,否则用0填充数组。底部或侧面。如果是这种情况,请在阵列中的位置用9代替。
我感到困惑的部分是语句(pField[y*fieldWidth + x] =
)我相信这是一个条件语句,我理解之后的逻辑,我的问题特别是关于此条件的,应该如何使用if语句解释它如果可能的话,如果它不是条件语句,那是什么样的语句?
pField = new unsigned char[fieldWidth*fieldHeight]; // Create play field buffer
for (int x = 0; x < fieldWidth; x++) // Board Boundary
for (int y = 0; y < fieldHeight; y++)
pField[y*fieldWidth + x] = (x == 0 || x == fieldWidth - 1 || y == fieldHeight - 1) ? 9 : 0;
答案 0 :(得分:4)
代码使用二维数组,该数组在内存中分配为一维数组。表达式y*fieldWidth + x
正在从一对2D索引中计算一个1D数组索引。
该数组代表一个矩形。该代码将9
分配给表示矩形的左,右和底边(但不包括顶边)的一维数组元素,并将一0
代表一维矩形的其余部分。矩形。
例如,一个5x5矩形如下所示:
9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 9 9 9 9
相应的一维数组元素如下所示:
x = 0 1 2 3 4 | 0 1 2 3 4 | 0 1 2 3 4 | 0 1 2 3 4 | 0 1 2 3 4
y = 0 0 0 0 0 | 1 1 1 1 1 | 2 2 2 2 2 | 3 3 3 3 3 | 4 4 4 4 4
---------------------------------------------------------
pField[] = 9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 9 9 9 9
可以使用?:
这样的语句来重写三元if
运算符:
int value;
if (x == 0 || x == fieldWidth - 1 || y == fieldHeight - 1)
value = 9;
else
value = 0;
pField[y*fieldWidth + x] = value;
答案 1 :(得分:1)
此代码将2D数组的空间分配到1D数组中,然后设置数组中的每个元素。具体来说,对于您所质疑的代码,逻辑在数组的左侧将2D索引转换为1D索引。在赋值的右侧,通过将布尔谓词级联为结果布尔值来计算该值,然后通过三元运算符在返回的0或9之间选择布尔值,并将其写入无符号char数组元素。