我正在编写一些代码来进行位图混合,我的函数有很多选项。我决定使用switch
来处理这些选项,但后来我需要将switch
置于循环中(我读取它会影响性能)或为每个switch
情况分配循环(使代码太大了)。我决定用第三种方式做到这一点(见下文):
/* When I need to use static value */
BYTE *pointerToValue = (BYTE*)&blendData.primaryValue;
BYTE **pointerToReference = &pointerToValue;
*pointerToReference = *pointerToReference - 3;
/* When I need srcLine's 4th value (where srcLine is a pointer to BYTE array) */
BYTE **pointerToReference = &srcLine;
while (destY2 < destY1) {
destLine = destPixelArray + (destBytesPerLine * destY2++) + (destX1 * destInc);
srcLine = srcPixelArray + (srcBytesPerLine * srcY2++) + (srcX1 * srcInc);
for (LONG x = destX1; x < destX2; x++, destLine += destInc, srcLine += srcInc) {
BYTE neededValue = *(*pointerToReference + 3); //not yet implemented
destLine[0] = srcLine[0];
destLine[1] = srcLine[1];
destLine[2] = srcLine[2];
if (diffInc == BOTH_ARE_32_BIT)
destLine[3] = srcLine[3];
}
}
有时我可能需要使用srcLine[3]
或blendData.primaryValue
。使用srcLine[3]
可以轻松访问*(*pointerToReference + 3)
,但访问blendData.primaryValue
我需要将指针减少3才能保持相同的表达式(*(*pointerToReference + 3)
)。
所以这是我的问题:
srcLine[3]
或blendData.primaryValue
的值
没有if()
,就像在我的代码示例中完成的那样?答案 0 :(得分:2)
由于#2没有使用,#1的答案是肯定的,它是完全安全的。因为#1,所以不需要#3。 : - )
只有在实际使用指针时才会发生访问冲突。