繁体   English   中英

通过指针读取多维数组或向量是否安全?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM