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

被折叠的 条评论
为什么被折叠?



