猿问

我有一个带有条件的for循环如下:

 uint index = ...// const float *bufferPtr = ...// uint stride = ...// uint vertexCount = ...for (uint i = 0; i < vertexCount; i++) {
    float xVal = *bufferPtr++;
    float yVal = *bufferPtr++;
    float zVal = *bufferPtr++;
    bufferPtr += stride;
    if (i == index) {
        qDebug() << "Vertex coord: " << xVal << " , " << yVal << " , " << zVal;
    }}

我尝试用索引直接访问替换for循环(及其中的条件):

float xVal = *(bufferPtr + index * stride + 0);float yVal = *(bufferPtr + index * stride + 1);float zVal = *(bufferPtr + index * stride + 2);qDebug() << "Vertex coord without loop: " << xVal << " , " << yVal << " , " << zVal;

但输出日志给我不同的结果:

Vertex coord:  14.574  ,  -8.236  ,  7.644Vertex coord without loop:  20.67  ,  -19.098  ,  18.536Vertex coord:  14.552  ,  -8.024  ,  7.842Vertex coord without loop:  -0.361096  ,  0.109164  ,  0.926117Vertex coord:  14.722  ,  -8.18  ,  7.842Vertex coord without loop:  20.648  ,  -19.052  ,  18.522

我无法弄清楚为什么结果不同:(

C ++


慕婉清6462132
浏览 681回答 3
3回答

DIEA

你知道[]运算符吗?你知道指针算术需要对象的大小,指针指向它吗?你知道struct吗?我不知道你的代码为何如此复杂。您能否提供一些背景知识,为什么您需要通过手工制作的指针算法进行所有访问?
随时随地看视频慕课网APP
我要回答