void playWithThePixels(void* p, int depth, int pitch, int width, int height);
typedef unsigned char Pixel[4];
std::vector<Pixel[1600]> screen(900);
playWithThePixels(screen.data(), 32, 1600, 1600, 900);
return 0;
C数组和std::vector
的元素都保证是连续的,因此screen
应该在内存中连续布局。
我知道访问数组元素超出界限是未定义的行为,但是在读取指针时如何,例如在示例代码中?
或者如果你这样做
std::cout << screen[0][10000][0];
?这是定义的行为吗?我显然正在访问一个已分配的区域。
是否通过指针直接或间接读取数组元素会产生影响吗?
答案 0 :(得分:0)
是的,它应该有效。唯一的原因是Pixel [1600]的大小适合大多数CPU架构的对齐条件。
通常,在图像处理中,最简单的方法是将图像放在一维数组中,然后手动或通过封装访问的相应类的帮助进行计算。
例如,在您的情况下,索引计算将是:
int pixelIdx = column + row * rowSize;
其中rowSize在你的情况下是1600。在大多数情况下,图像的宽度和高度在编译时是未知的,因此您无论如何都必须采用该策略。