当没有如下所示的malloc可以完成相同的工作时,为什么还要使用malloc。
#include <stdio.h>
#include <conio.h>
struct node {
int data;
struct node *l;
struct node *r;
};
int main(){
//Case 1
struct node n1;
n1.data = 99;
printf("n1 data is %d\n", n1.data);
//Case 2
struct node *n2 = (struct node *) malloc (sizeof(struct node));
n2 -> data = 4444;
printf("n2 data is:%d\n",n2 -> data);
free(n2);
return (0);
}
如果不通过malloc完成相同的工作,为什么我会使用malloc,如下所示。
您使用malloc在堆上分配内存,而没有malloc,则将struct放在堆栈内存中。
我很难理解未初始化为内存位置的n1如何存储数据(99)。
无论是否初始化,在分配数据n1.data = 99;
时都会存储它。
2)何时使用案例1和何时使用案例2
当您知道将在有限范围内使用结构对象,并且不会引用超出其范围的结构数据时,将使用情况1。
当您要在多个地方使用结构并且愿意手动(并小心!)管理内存时,将使用情况2。这种方法的优点是,您可以在程序作用域的某个部分创建和初始化结构,然后创建一个指针并传递该指针,因为传递一个4字节的指针比传递结构本身要高效得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句