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)
你能解释一下这种不一致的原因是什么吗?谢谢!
没有不一致.这两种方法中的每一种都可以用于基元和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)