C 结构的内存分配

C 结构的内存分配,c,memory-management,struct,C,Memory Management,Struct,什么时候用C为结构分配内存?是在我声明它时,还是在我创建它的实例时?另外,为什么不能在结构中使用静态变量?当您定义一个结构时,您没有为它分配内存,这就是为什么您可以使用typedef来避免写入struct my_struct_name。 当您定义一个结构时,您正在声明一个数据类型,这就是为什么在您声明该结构的一个实例之前,它们不会占用数据 struct point{ int x; int y; }; 这不会占用空间,直到在函数或main中声明一个类似的函数 int main(void){

什么时候用C为结构分配内存?是在我声明它时,还是在我创建它的实例时?另外,为什么不能在结构中使用静态变量?

当您定义一个结构时,您没有为它分配内存,这就是为什么您可以使用typedef来避免写入struct my_struct_name。 当您定义一个结构时,您正在声明一个数据类型,这就是为什么在您声明该结构的一个实例之前,它们不会占用数据

struct point{   int x;  int y; };
这不会占用空间,直到在函数或main中声明一个类似的函数

int main(void){

    struct point mypoint1,mypoint2;//THIS IS WHEN MEMORY STARTS BEING ALLOCATED
    return 0;
}

关于静态,我认为实际上没有必要向结构声明静态?为什么要将变量设置为结构的静态变量?

什么是“结构中的静态变量”呢?类似这样的内容:结构temp{static int a;};当我创建上述结构的实例时,编译器会说没有名为“a”的成员。a
struct
与变量完全相同。此外,为什么不能在结构中使用静态变量因为它没有被设计成C语言。可能是@Manali的复制品,我想问题不是“我该怎么写它”,而是“它对结构成员意味着什么”,谢谢!这很有帮助。好的,我意识到我不需要在结构中创建静态变量。但是,在结构中显式声明为auto的变量也会抛出一个编译器错误,表示没有这样的成员。知道为什么会这样吗?默认情况下,变量不是自动的吗?自动抛出编译错误也是有意义的,因为它会推断数据类型。假设你定义了我给你的同一个结构点,把autox放进去;如果在一点上你把x=0,在另一点上把x=0.0,你就会有问题。我再一次认为,当你声明一个结构时,你知道你将在其中使用什么样的数据类型,这实际上是没有意义的。