编译器对未分配的结构变量进行投诉是因为它无法确定结构体变量的内存大小。然而,编译器允许成员进行分配是因为它可以确定每个成员变量的内存大小。
为了解决这个问题,我们可以使用动态内存分配来分配结构体变量的内存。以下是一个示例代码:
#include
#include
typedef struct {
int x;
int y;
} Point;
int main() {
Point* p = (Point*)malloc(sizeof(Point)); // 分配结构体变量的内存
if (p == NULL) {
printf("内存分配失败\n");
return 1;
}
p->x = 10; // 分配成员变量的值
p->y = 20;
printf("x = %d, y = %d\n", p->x, p->y);
free(p); // 释放内存
return 0;
}
在上面的代码中,我们使用malloc
函数动态分配了一个Point
类型的结构体变量的内存。然后,我们可以使用箭头运算符->
来访问结构体变量的成员变量,并为它们分配值。最后,记得使用free
函数释放动态分配的内存。
通过使用动态内存分配,我们可以在编译器的投诉下正确地分配结构体变量的内存,并为其成员变量分配值。