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;
}