再用结构体指针的时候为什么不在堆区申请内存就用不了

上面和下面代码一样,只是下面的malloc函数被注释掉了,可是为什么不在堆区申请空间结构体指针就无法使用呢,求解

img

img

指针声明后是没有存储空间的 需要给分配出来

供参考,说明见注释:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
    int a;
    double b;
    char c[30];
}Try;
int main()
{
    Try* x, * y; //定义两个结构体指针变量
    Try  X;      //定义了结构体变量

    x = (Try*)malloc(sizeof(Try)); //给结构体指针变量 x 分配空间
    x->a = 200;                    //然后赋值 输出
    x->b = 6.2830;
    strcpy(x->c, "Hello");
    printf("%s %d %f\n\n", x->c, x->a, x->b);

    X.a = 100;                 //结构体变量 X 已分配空间,所以可以直接赋值, 输出
    X.b = 3.1415;
    strcpy(X.c, "world!");
    printf("%s %d %f\n\n", X.c, X.a, X.b);

    y = &X;                  //将指针 y 指向结构体变量 X 所在空间
    printf("%s %d %f\n\n", y->c, y->a, y->b); // 输出

    y = x;                  //将指针 y 指向结构体指针变量 x 申请的空间  
    printf("%s %d %f\n\n", y->c, y->a, y->b); // 输出
    return 0;
}