Mar*_*eIV 0 c arrays types reference
我们有以下两个静态定义的字节数组......
unsigned char pixelBuffer1[32][6] = {/**/};
unsigned char pixelBuffer2[32][6] = {/**/};
Run Code Online (Sandbox Code Playgroud)
我们想将当前缓冲区存储在变量中,但我们不确定如何声明它.这就是我们想要做的......
[SOMETYPE] activePixelBuffer;
activeBufferId == getOneOrTwoBasedOnSomeLogic();
activePixelBuffer = (activeBufferId == 1)
? pixelBuffer1
: pixelBuffer2;
activePixelBuffer[17][4] = x;
activeBufferId == getOneOrTwoBasedOnSomeLogic();
activePixelBuffer = (activeBufferId == 1)
? pixelBuffer1
: pixelBuffer2;
activePixelBuffer[23][2] = y;
Run Code Online (Sandbox Code Playgroud)
(注意我们在整个代码中重新分配activePixelBuffer的值)但是,我们不确定要输入什么 [SOMETYPE]
我知道如果我们将pixelBuffer1或pixelBuffer2传递给一个函数,我们会像这样定义它...
void someFunc(unsigned char (&myArray)[32][6])
{
...
}
Run Code Online (Sandbox Code Playgroud)
...但这似乎不能作为局部变量声明类型.此外,这迫使我们硬编码维度大小,这是好的,但不必这样做是很好的.
我们也尝试过使用指针,但阵列的二维方面也让我们失望.
那么我们用什么类型?
使用typedef:
typedef unsigned char PixelBuffer[32][6]; // NB: SPOT principle, aka DRY!
PixelBuffer pixelBuffer1 = { ... };
PixelBuffer pixelBuffer2 = { ... };
PixelBuffer *activePixelBuffer = (activeBufferId == 1) ? &pixelBuffer1 :
&pixelBuffer2;
(*activePixelBuffer)[17][4] = x;
Run Code Online (Sandbox Code Playgroud)
请注意,除了使语法更清晰之外,这也是SPOT(单点真相)原则的一个例子,又称DRY(不要重复自己) - 你的2D数组类型应该只被定义一次 - 没有复制和粘贴unsigned char foo[32][6]!