为什么要使用malloc结构?

Dav*_*run 7 c structure

为什么我会在没有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);
}
Run Code Online (Sandbox Code Playgroud)
  1. 我很难理解未初始化到内存位置的n1如何能够存储数据(99).
  2. 何时使用案例1以及何时使用案例2.

Bar*_*mar 10

为什么我会在没有malloc的情况下完成相同的工作手杖时使用malloc,如下所示.

您使用malloc,在堆上分配内存,而没有malloc,您将结构放在堆栈内存中.

我很难理解未初始化到内存位置的n1如何能够存储数据(99).

是否已初始化,当您分配数据时n1.data = 99;,它将被存储.

2)何时使用案例1以及何时使用案例2

当您知道将在受限范围内使用结构对象时,使用情况1,并且不会超出其范围引用结构数据.

如果您将在多个地方使用您的结构,并且您愿意手动(并仔细!)管理内存,则使用案例2.这种方法的优点是,您可以在程序范围的某些部分创建和初始化结构,并创建指针并传递指针,因为传递4字节指针比传递结构本身更有效.