[英]Is it safe to read a multidimensional array or vector through a pointer?
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];
? 这是定义的行为吗? 我显然正在访问分配的区域。
通过指针直接或间接读取数组元素会有所不同吗?
是的,应该可以。 出于唯一原因,Pixel [1600]的大小将适合大多数CPU体系结构的对齐条件。
通常,在图像处理中,最简单的方法是将图像放入一维数组中,然后手动或借助封装访问的相应类来进行访问像素的计算。
例如,在您的情况下,索引计算为:
int pixelIdx = column + row * rowSize;
其中rowSize在您的情况下为1600。 在大多数情况下,图像的宽度和高度在编译时是未知的,因此无论如何您都必须采用该策略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.