Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ I';我很难理解一段代码中使用的语法_C++ - Fatal编程技术网

C++ I';我很难理解一段代码中使用的语法

C++ I';我很难理解一段代码中使用的语法,c++,C++,我已经研究了一段时间了,我对这段代码的功能有了一些想法,但我不确定我是否正确理解了代码的语法 代码在一个无符号字符的2D数组中迭代,这意味着用0填充数组,除非数组中的点代表;底部或侧面。如果是这种情况,则用9代替数组中的点 我感到困惑的部分是语句(pField[y*fieldWidth+x]=)我相信这是一个条件语句,我理解后面的逻辑,我的问题是关于这个条件语句的,如果可能的话,应该如何用if语句解释它?如果它不是条件语句,它是什么类型的语句 pField = new unsigned cha

我已经研究了一段时间了,我对这段代码的功能有了一些想法,但我不确定我是否正确理解了代码的语法

代码在一个无符号字符的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;

pField=新的无符号字符[fieldWidth*fieldHeight];//创建游戏区缓冲区
对于(int x=0;x
此代码将二维数组的空间分配到一维数组中,然后设置数组中的每个元素。具体地说,关于您询问的代码,在数组的左侧,逻辑从2D索引转换为1D索引。在赋值的右侧,通过将布尔谓词连接成结果布尔值来计算该值,然后通过三元运算符在返回0或9之间进行选择,并写入无符号字符数组元素。

此代码将2D数组的空间分配到1D数组中,然后设置数组中的每个元素数组。具体地说,关于您询问的代码,在数组的左侧,逻辑从2D索引转换为1D索引。在赋值的右侧,通过将布尔谓词连接成结果布尔值来计算该值,然后通过三元运算符在返回0或9之间选择该值,并将其写入无符号字符数组元素。

代码使用的是一个二维数组,该数组在内存中作为一维数组分配数组。表达式
y*fieldWidth+x
从一对二维索引计算一维数组索引

数组表示一个矩形。代码将
9
分配给表示矩形左、右和下边缘(但不是上边缘)的1D数组元素,并将
0
分配给表示矩形其余部分的1D数组元素

例如,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
语句重写,如下所示:

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
int值;
如果(x==0 | | x==fieldWidth-1 | | y==fieldHeight-1)
数值=9;
其他的
数值=0;
pField[y*fieldWidth+x]=值;

代码使用的是在内存中作为一维数组分配的二维数组。表达式
y*fieldWidth+x
从一对二维索引计算一维数组索引

数组表示一个矩形。代码将
9
分配给表示矩形左、右和下边缘(但不是上边缘)的1D数组元素,并将
0
分配给表示矩形其余部分的1D数组元素

例如,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
语句重写,如下所示:

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
int值;
如果(x==0 | | x==fieldWidth-1 | | y==fieldHeight-1)
数值=9;
其他的
数值=0;
pField[y*fieldWidth+x]=值;

它是
[]
中的一个计算数组索引。它是
[]
中的一个计算数组索引。感谢您的回复,我相信我已经理解了现在发生的事情。但有一件事是,它不算顶部为一个侧面。它就像一个没有盖子的长方形。啊,非常感谢你,这很有意义!然而,有一个问题是,1D数组中的第一个5x片段是否为9 0 0 9?是的,当y=0,x=0时,它在1D数组中的值不应该是9而不是0,因为它在2D数组中的y=0,x=0时的值是9?y=0,x=4也是一样。谢谢你的改变,雷米,我现在明白了。谢谢你的回答,我相信我现在明白了。但有一件事是,它不算顶部为一个侧面。它就像一个没有盖子的长方形。啊,非常感谢你,这很有意义!然而,有一个问题是,1D数组中的第一个5x片段是否为9 0 0 9?是的,当y=0,x=0时,它在1D数组中的值不应该是9而不是0,因为它在2D数组中的y=0,x=0时的值是9?y=0,x=4也是一样。谢谢你的改变,雷米,我现在明白了。