如何在C语言中动态添加一个结构体成员?

6
struct point { 
    int x;
    int y;
};

main() {
    struct point a;
    a.x = 5;
    a.y = 10;
    printf("%d %d", a.x, a.y);
}

输出:

5 10

如果我想在同一结构体中动态添加成员(int z),该怎么做?

我尝试了以下方法:

struct point {
    int x;
    int y;
};

struct newpoint {
    struct point a;
    int z;
};

我尝试了上述步骤,通过这些步骤我们已经将新成员和旧结构体中的 point 添加到了新结构体 newpoint 中。但这不是我想要的,我想动态地向同一结构体添加新成员。这是我在面试中遇到的问题。


1
你不能添加成员。但是你可以创建一个结构体数组,并改变数组的大小。 - ryyker
可能是重复问题:https://dev59.com/42025IYBdhLWcg3wJCVE - Frederick Zhang
1个回答

6

问你这个问题的面试官是想设陷阱。

在C语言中,“动态定义结构”是不可能的。在其他语言比如JavaScript中,可以进行“鸭子类型”,但C语言的结构体是编译时定义的,是非常静态的。


1
如果他在运行时创建一个C文件,并将其编译为库并动态加载它,那么他可以动态地创建结构。这正确吗?@Amit - Parham Alvani
2
@ParhamAlvani - 这并没有帮助,因为“主”应用程序不知道“动态”结构的结构,并且无法通过标识符与其成员进行交互,只能通过内存偏移量进行交互,这与分配一大块内存并执行相同的操作一样有用。 - Amit
1
@ParhamAlvani:采取如此不必要的极端措施,您可以动态创建库可以使用的结构。但现有程序无法使用。无论如何,如果您将“编写和编译全新程序”包括在“动态定义”的含义之内,那么您正在扩大“动态定义”的定义范围。 - Crowman
感谢您的解释。虽然我在面试时说过,在C语言中不可能实现,但他提到好像可以这样做。无论如何,我会尝试与他见面并获取答案。 - sri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接