当前位置:首页 » 编程语言 » c语言结构体与共用体
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言结构体与共用体

发布时间: 2022-07-24 19:13:29

⑴ 在c语言里面,共用体和结构体的区别是什么

首先你说的很对 共同体的确占的内存要比结构体小

结构体占用的内存空间,是其元素,占空间的总和,而共用体是,元素中占用空间最大的元素的空间!所以共用体在空间开销上要小一点!

但是既然是两个不同的概念当然是不一样的 要不就没必要定义两个名词了

其实在共用体所用的内存中已经写入了数据!当使用其它元素时!上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用

结构体则不然, 每个成员都会有存储空间的,可以一起用.内部变量间是相互独立的,c中的结构体和C++里的类很相像~~

⑵ C语言的结构体和共同体的区别是什么

结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。
具体来说,结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成,
但在任何同一时刻,
共同体(union)中只存放了一个被选中的成员,
而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度。
2.
对于共同体(union)的不同成员赋值,
将会对其它成员重写,
原来成员的值就不存在了,
而对于结构体(structure)的不同成员赋值是互不影响的。

⑶ 共用体和结构体的区别

一、变量长度不同

结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。

共用体变量所占的内存长度等于最长的成员的长度。

二、占用空间不同

结构体是同时存在的,并一次占用一段连续的内存空间;

而共用体则是多个共用成员占用同一个开始的内存地址,同时他们只能存在一各,所以空间大小就是最大那个所需的空间,如果单从一个共用体来讲,我们是不知道里面存的是什么内容,需要根据程序上下文才能确定。

三、分配储存空间不同

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,简称结构。在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体来使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。

结构体类型的定义只是由用户构造了一个结构体,但定义结构体类型时系统并不为其分配存储空间。

⑷ c语言结构体与共用体

#include<stdio.h>

#include<stdlib.h>

struct student{

int number;

char name[15];

double score[3];

};

void Display_All(struct student * p,int count);

void Display_Average(struct student * p_student,int count);

int cmp(const void *a,const void *b);

void main()

{

int i=0;

int count_student;

printf("how many student:\n");

scanf("%d",&count_student);

struct student * p_student=malloc(sizeof(struct student)

*count_student);

printf("please enter student's data:\n");

//从键盘输入学生们的数据

for(i=0;i<count_student;i++)

{

printf("number:");

scanf("%d",&(p_student+i)->number);

printf("name:");

scanf("%s",(p_student+i)->name);

printf("first score:");

scanf("%lf",&(p_student+i)->score[0]);

printf("second score:");

scanf("%lf",&(p_student+i)->score[1]);

printf("third score:");

scanf("%lf",&(p_student+i)->score[2]);
}

//输出成绩报表

Display_All(p_student,count_student);

Display_Average(p_student,count_student);

}

int cmp(const void *a,const void *b)

{

return (((struct student*) a)->score[0]+((struct student*) a)-

>score[1]+((struct student*) a)->score[2])/3>(((struct student*) b)->score

[0]+((struct student*)b)->score[1]+((struct student*) b)->score[2])/3?-1:1;

}

//并输出成绩报表(包括每人的学号,姓名,三门成绩及平均分数)

void Display_All(struct student* p_student,int count)

{

int i=0;

printf("number name first_score second_score third_score

average_score\n");
for(i=0;i<count;i++)

{

printf("%-8d%-10s%-13lf%-14lf%-14lf%-14lf\n",(p_student

+i)->number,(p_student+i)->name,(p_student+i)->score[0],(p_student+i)-

>score[1],(p_student+i)->score[2],((p_student+i)->score[0]+(p_student+i)-

>score[1]+(p_student+i)->score[2])/3);

}

}

//输出平均分在前五名的学生姓名及平均成绩

void Display_Average(struct student * p_student ,int count)

{

int i;

qsort(p_student,count,sizeof(struct student),cmp);

printf("name average_score\n");

for(i=0;i<2;i++)

{

printf("%-8s%-lf\n",(p_student+i)->name,((p_student+i)-

>score[0]+(p_student+i)->score[1]+(p_student+i)->score[2])/3);

}

}

⑸ C语言中结构体和共用体

你好,很高兴看到自己可以解决的题目了!
首先应该知道union共用体的数据存储结构,共用体就是所有的类型的数据数据共用同一段内存空间,像上面的z共用体,它所占的内存是16字节,而非17字节,其中对于unsigned int 类数组i[4]占有16个字节,char类型占有1个字节,但是两种类型的数据其实存储都是从同一地址开始的,1~16字节存储数组变量,1字节存储char变量,这就说明1字节中是两种类型变量共用地址段,并且共用字段的数据具有按位覆盖的特点,了解了这些,下面来分析这道题。
首先对类存进行说明,加入开始时未初始化,用*表示未初始化的位,
开始运行时: : ****.....*****(前64bits)******....****(中间32bits)******.....****(后32bits0)
执行z.i [0]=0x39;后,: ****.....*****(前64bits)******....****(中间32bits)00000000,00000000,00000000,00111001.
执行z.i [1]=0x36;后,:****.....*****(前64bits)00000000,00000000,00000000,00110110, 00000000,00000000,00000000,00111001.
然后执行输出语句,z.c,取最后一次执行union的结果,char是1个字节,所以取它的后8位,结果为39(int类型的),在转化为字符(ASCII),结果为9,。
我自己能力有限,也只能做这么很含糊的解说了,谢谢你的问题,共同进步!
开开心心!

⑹ 在C语言中,结构体和共用体的概念和两者的区别是什么啊

共用体内各成员公用同一块内存空间。
结构体中各成员具有相互独立的内存空间。
union exp_uni{
int a;
byte b[4];
}
上面的a,b公用同一块内存,4字节。

struct exp_stu{
int a;
byte b[4];
}
上面的a,b具有独立的内存空间,一个exp_stu对象,占8字节空间。

⑺ 结构体和共用体在c语言中是怎么用的

结构体和共用体其实都是用来描述一组由不同类型变量的集合,也就是说结构体和共用体中都可以同时存在int型、char型、float型等等!!
但是不同的是,结构体内所定义的每一个变量都有其自己独立的存储空间,互不干涉,比如一个结构体中有一个int型、同时有一个char型,那么它们是独立的,总共占用三个字节空间。
而共用体内定义的每一个变量都共同享有同一个存储空间,存储空间的大小是占用空间最大的那个一变量的大小。比如,我还是在里面有一个int型和一个char型,那这个共用体就占int型的2个字节,加入我用共用体存入一个char型数据,我可以用int型来读取,读的是二进制数据。
呵呵呵呵,c语言是很久以前学的了,不知道这点记忆对不对,但是希望能帮得到你。