我在理解一段代码中使用的语法时遇到麻烦

时间:2020-10-04 21:15:33

标签: c++

我已经看了一段时间了,我对这段代码可以做什么有一些想法,但是我不确定我是否正确理解了这段代码的语法。

代码循环遍历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;

2 个答案:

答案 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数组元素。