我有一些像下面这样的结构体:
typedef struct {
GLubyte red, green, blue;
} pixel;
typedef struct {
pixel *pixelData;
int w, h;
} imagen;
这是一个用于图像加载和图像处理(对已加载的图像应用滤镜)的工具。
我正在初始化两个imagen
:
imagen work, original;
work
是我想要在一些筛选器应用之后展示的内容,而original
是我可以重置为原始状态的内容。
void loadImage() {
//load data into (imagen)original
}
work = original;
加载图像后,我将其复制到
work
中,以便在需要重置时保留原始副本(重置是指再次将work = original
)。我面临的问题是重置不起作用:我对work
所做的任何更改也会应用于original
,因此实际上我正在将其重置为我要重置的内容。我认为问题出在我的
work = original
上;虽然我对C比较新,但我认为我只是将work
指向了original
,因此我对work
所做的任何逻辑也会应用于original
?original.w = 40;
work = original;
work.w = 50;
work = original;
在这种情况下,
work.w
是40还是50?如果它确实指向原始文件,我该如何将original
克隆到work
上,以便我可以安全地在work
上工作,而不会影响original
?
struct
变量进行“深拷贝”(https://en.wikipedia.org/wiki/Object_copying#Deep_copy)。 - alk