堆栈与原始数据类型的内存分配

Dar*_*der 1 c malloc memory-management

在C中声明一个结构时,请说:

typedef struct my_stuct {
 int x;
 float f;
} STRT;
Run Code Online (Sandbox Code Playgroud)

如果我们想要创建这个结构的一个实例并使用它,我们显然需要调用malloc,在我们实际初始化/使用结构的任何成员之前,获取一个指向该结构的内存位置的指针:

STRT * my_struct_instance = (STRT *) (malloc(sizeof(STRT)));
Run Code Online (Sandbox Code Playgroud)

但是,如果我声明一个原始数据类型(比如"int a;")然后想要初始化它(或对它做任何其他操作),我不需要在执行任何操作之前通过调用malloc为它显式分配一个mempory空间.对它的操作:

// we do not need to do a malloc(sizeof(i)) blah blah here. Why?
i = 10;
Run Code Online (Sandbox Code Playgroud)

你能解释一下这种不一致的原因是什么吗?谢谢!

NPE*_*NPE 7

没有不一致.这两种方法中的每一种都可以用于基元和structs:

  STRT s1 = {1, 2};
  int i1 = 1;

  STRT *s2 = (STRT *)malloc(sizeof(STRT));
  int *i2 = (int *)malloc(sizeof(int));
  ...
Run Code Online (Sandbox Code Playgroud)

  • @ user721998:将` - >`改为`.`,它会起作用. (6认同)
  • @ user721998:`s-> x`与`(*s).x`相同,即仅当`s`是指针时它才有效.在这里,事实并非如此. (3认同)