c语言 共用体指针这段代码为何报错 ?

c语言 共用体指针这段代码为何报错 ?

问题描述:

//代码段1
#include <stdio.h>
union{
        short a[2];
        long b;
        char c[4];
    }p;
    
int main(){
    
    p.a[0] = 0x35;
    p.a[1] = 0x34;
    printf("%lx",p.b);
    printf("%c",p.c[0]);
    return 0;
}


/*
#include <stdio.h>
union{
        short a[2];
        long b;
        char c[4];
    }*p;
    
int main(){
    
    p->a[0] = 0x35;
    p->a[1] = 0x34;
    printf("%lx",p->b);
    printf("%c",p->c[0]);
    return 0;
}
*/

也就是代码段2 调试时在第一条语句 (p->a[0] = 0x35;) 就出了问题

因为没有申请内存空间。需要malloc一下才行

*p你没有分配空间啊

union un{
        short a[2];
        long b;
        char c[4];
    }*p;
int main(){
    p = (un*)malloc(sizeof(un));
    p->a[0] = 0x35;
    p->a[1] = 0x34;
    printf("%lx\n",p->b);
    printf("%c",p->c[0]);
    free(p);
    return 0;
}