共用体与typedef用法

本文介绍了C语言中的共用体和typedef的概念及用法。共用体允许不同数据类型的数据共享同一存储区域,内存占用按最大成员决定。与结构体不同,共用体成员赋值会覆盖原有数据。typedef用于简化数据类型定义,便于多次使用相同结构体类型。文中通过示例解释了typedef在定义新数据类型时的应用。
lv2 Day4 03 共用体与typedef用法

共用体
1.在C语言中,共用体的概念;其与结构体的区别在哪里;举例说明。
2.共用体的定义,共用体类型成员的赋值,内存所占用的存储空间的位置关系。

typedef
3.typedef的使用方法,为什么会产生这个关键字,其作用是什么。
4.在C语言中,常用typedef定义结构体类型。举个例。

(1)在C语言中,不同数据类型的数据可以使用相同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体 union。
(2)其与结构体的区别在于,共用体的成员在内存中使用共同的存储空间,如果成员的数据类型不同,则按占用内存最大的成员的数据类型分配。而结构体总是根据按各成员的数据长度之和占用内存空间。
(3)

union gy{
         int i;
         char c;
         float f;
       }

这里定义了一个共用体类型union gy,它含有3个不同数据类型的成员,但是 sizeof(union gy) 结果是 sizeof(int) 的值。
2.
(1)共用体的定义方式与结构体类似,共有3种。
(2)考虑到共用体的成员是使用同一块内存空间,故其成员的赋值必定存在一个相互覆盖的问题。因此,在共用体类型变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后,原有的成员就失去作用。

#include <stdio.h>
union gy{
char a;
short b;
int c;
}v2;
int main()
{
union gy v1;
char *p;
p=(char *)&v1;//这里不能忘了强制转换
int i;

printf("%d %d %d\n",sizeof(char),sizeof(short),sizeof(int));
printf("%d \n",sizeof(union gy));

v1.a='A';
v1.b=20;
v1.c=0x12345678;
printf("%#x %c\n",v1.a,v1.a);
printf("%p %p %p\n",&v1.a,&v1.b,&v1.c);

for(i=0;i<sizeof(union gy);i++)
{
  printf("%#x\n",*P);
  p++;
 }
return 0;
}

输出结果

1 2 4
4
0x78 x
0060FEF4 0060FEF4 0060FEF4
0x78
0x56
0x34
0x12

3
有时候我们不经意间会定义很多相同结构体类型的变量,或者指针。为了使用方便,在C语言中,允许使用关键字typedef定义新的数据类型。
其语法如下:typedef <已有数据类型> <新数据类型>;
4.
例如

typedef struct node{
int data;
struct node * next;
}listnode,*linklist;

//这两种写法等价

struct node{
int data;
struct node * next;
};
typedef struct node listnode;
typedef struct node * linklist;
#include <stdio.h>

typedef struct node{
int data;
struct node * next;
}listnode,*linklist;
int main()
{
 //struct node n1,n2,n3,*p;
 //listnode n1,n2,n3,*p;
 listnode n1,n2,n3;
 linklist p;
 
 n1.data=10;
 n1.next=NULL;
 
 n2.data=20;
 n2.next=NULL;
 
 n3.data=40;
 n3.next=NULL;
 
 p=&n1;
 
return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值