将void *转换为struct数组

时间:2016-03-26 20:59:48

标签: c++ arrays vector struct casting

我有一个RGB数据矢量。

vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4}); 

我想水平翻转此图像(关于中间列)。

执行翻转操作,我创建了一个函数

flip(void* image, int rows, int cols)

我想要执行翻转,但保持RGB的三维完整

所以我创建了一个

struct color{
    char r;
    char g;
    char b;
};

并将该函数调用为

int main(){
vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4});
flip(&image[0],rows,cols);
}

但是将void *转换为struct color []会引发编译错误。 我该如何处理?

2 个答案:

答案 0 :(得分:1)

您无法在C ++中强制转换为数组。你必须使用指针。

struct color* image = (struct color*)arr;

为了您的目的,这不会立即起作用。您必须开始使用char而不是int的向量。这是因为int通常是4个字节,char是1个字节。试图为你的结构分配int(这是3个字节)不会给你你期望的结果。

然后您可以将指针作为数组访问。例如,image[0].r将返回向量中的第一个值,image[1].r将返回第四个值。请注意不要超出矢量的大小。

答案 1 :(得分:0)

我将结构更改为

struct color{
int rgb[3];
};

struct color* image = (struct color*)arr;

提供了一个struct颜色数组,可以翻转,保持rgb数据不变。