我正在尝试了解C中面向对象的编程。在我的互联网研究中,我遇到了此代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x, y;
int width;
int height;
} Rectangle;
Rectangle *Rectangle_init(int x, int y, int width, int heihgt) {
Rectangle *obj = malloc(sizeof *obj);
obj->x = x;
obj->y = y;
obj->width = width;
obj->height = height;
return obj;
}
void Rectangle_draw(Rectangle *obj) {
printf("I just drew a nice %d by %d rectangle at position (%d, %d)!n",
obj->width,
obj->height,
obj->x,
obj->y);
}
int main(void) {
Rectangle *r = Rectangle_init(1, 1, 3, 5);
Rectangle_draw(r);
return 0;
}
代码编译和运行,我确实了解所有内容。但是,我没有得到的是为什么``obj''在malloc-call中可以引用``obj'',尽管它尚不存在?
,但指针OBJ是malloc(sizeof *obj)的返回值。我不明白为什么我可以使用OBJ来获得OBJ的尺寸。它像递归一样,但不是真的。我对我没有任何意义
sizeof是一个操作员,就像您习惯的算术运算符和其他运营商一样。这意味着它是告诉编译器执行特定数学或逻辑功能的符号。在这种特定情况下,它告诉编译器查询对象或类型的大小。这样做时,编译器可以说OBJ是其代码分析的矩形。