为什么我会在没有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); }
>我很难理解未初始化到内存位置的n1如何能够存储数据(99).
>何时使用案例1以及何时使用案例2.
解决方法
Why would I use malloc when same job cane be done by without malloc as
below..
您使用malloc,在堆上分配内存,而没有malloc,您将结构放在堆栈内存中.
I am having hard time to understand how n1 which is not initialized
to memory location is able to store data (99) .
分配数据时是否初始化n1.data = 99;,它被存储.
2) when to use case 1 and when to use case 2
当您知道将在受限范围内使用结构对象时,使用情况1,并且不会超出其范围引用结构数据.
如果您将在多个地方使用您的结构,并且您愿意手动(并仔细!)管理内存,则使用案例2.这种方法的优点是,您可以在程序范围的某些部分创建和初始化结构,并创建指针并传递指针,因为传递4字节指针比传递结构本身更有效.