C ++指针递增顺序

时间:2014-02-19 13:32:04

标签: c++ pointers

我有一个简单的双用于将rgb图像转换为灰度,但我在使用VS编译器的Windows上有一些奇怪的行为。 我注意到我的两个实现有不同的结果。 第一个:

int ok = 0, nok = 0;
for(int y = 0; y < img.height(); y++){
    uchar *line = img.getLine(y);
    for(int x = 0; x < img.width(); x++){
        *(destinationPtr++) = ((*(line++)) + (*(line++)) + (*(line++)))/3;
    }
}

第二个:

int ok = 0, nok = 0;
for(int y = 0; y < img.height(); y++){
    uchar *line = img.getLine(y);
    for(int x = 0; x < img.width(); x++){
        uchar r = *(line++);
        uchar g = *(line++);
        uchar b = *(line++);
        *(destinationPtr++) = (r+g+b)/3;
    }
}

经过几次测试后,我认为在我的第一个实现中出现问题,代码是用这个命令执行的:

*(destinationPtr) = ((*(line)) + (*(line)) + (*(line)))/3;
destinationPtr++;
line++;
line++;
line++;

在我与GCC的Linux编译中我没有这个问题,你有这个原因吗?后增量不是标准的东西吗?

0 个答案:

没有答案