sizeof someStruct->someArray[i][j] 总是返回 4

sizeof someStruct->someArray[i][j] always returns 4

本文关键字:返回 someStruct- gt someArray sizeof      更新时间:2023-10-16

我已经[尝试]为zBuffer实现一个二维数组,如下所示:

struct Properties {
     ....
     double** zBuffer;
     ....
}

这是它的使用位置:

void initializeZBuffer(Properties* props){
    //Destroy old zBuffer 2D array (if it's already been initialized)
    if (sizeof props->zBuffer[0] >= 0){
        for (int i = 0; i < props->clientRect.Height(); i++){
            delete[] props->zBuffer[i];
        }
        delete[] props->zBuffer;
    }
    //Create new zBuffer 2D array
    props->zBuffer = new double*[props->clientRect.Height()]; //zBuffer height x width
    for (int i = 0; i < props->clientRect.Height(); i++){
        props->zBuffer[i] = new double[props->clientRect.Width()];
    }
}

我的目标是创建一个数组,该数组为屏幕上的每个x y像素保存一个z值。

我的代码中的问题是:我检查数组中是否有任何数据 - 它不应该在第一次迭代时,但它确实如此。出于某种原因,每个插槽的大小为 4。

例如,此时调试时:

sizeof props->zBuffer[1]  ----->  returns 4
sizeof props->zBuffer[100]  ----->  returns 4
sizeof props->zBuffer[1000000]  ----->  returns 4
sizeof props->zBuffer[10000000000]  ----->  returns 4

  sizeof props->zBuffer[1][1]  ----->  returns 4
    sizeof props->zBuffer[100][100]  ----->  returns 4
    sizeof props->zBuffer[1000000][1000000]  ----->  returns 4
    sizeof props->zBuffer[10000000000][10000000]  ----->  returns 4

由于它的大小为 4,我自然会尝试查看props->zBuffer[3](最后一个插槽)中的内容,但我得到一个错误

ds->zBuffer[3]
CXX0030: Error: expression cannot be evaluated

有谁知道发生了什么?我完全感到困惑和沮丧:(

sizeof 运算符在其操作数的对象表示形式中生成字节数。

让我们以sizeof(props->zBuffer[1])为例。首先,props->zBuffer[1]相当于*(props->zBuffer + 1)。如果我们1添加到一个double**,我们仍然有一个double**,如果我们取消引用它,我们得到一个double*。然后你拿sizeof。在您的计算机上,double*占用 4 个字节。这是double*的对象表示形式 - 存储double地址所需的字节数。