吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C中结构和联合的区别

C中结构和联合的区别

来源:网络 | 更新时间:2022-01-22 08:25:34
C中的结构 结构是 C 中可用的用户定义数据类型,它允许组合不同类型的数据项。结构用于表示记录。  定义结构:要定义结构,必须使用struct语句。struct 语句定义了一种新的数据类型,具有多于或等于一个成员。struct语句的格式如下:
 struct [structure name]
{
member definition;
member definition;
...
member definition;
};
联合 联合是 C 中可用的一种特殊数据类型,它允许在同一内存位置存储不同的数据类型。您可以定义具有许多成员的联合,但在任何给定时间只有一个成员可以包含值。联合提供了一种将同一内存位置用于多种用途的有效方式。  定义联合:要定义联合,您必须以与定义结构时相同的方式使用联合语句。union 语句为您的程序定义了一种具有多个成员的新数据类型。union 语句的格式如下: 
 union [union name]
{
member definition;
member definition;
...
member definition;
};
结构与联合之间的相似之处
  1. 两者都是用户定义的数据类型,用于将不同类型的数据存储为一个单元。
  2. 它们的成员可以是任何类型的对象,包括其他结构和联合或数组。一个成员也可以由一个位域组成。
  3. 结构和联合都只支持赋值 = 和 sizeof 运算符。赋值中的两个结构或联合必须具有相同的成员和成员类型。
  4. 结构或联合可以按值传递给函数,并由函数按值返回。参数必须与函数参数具有相同的类型。结构或联合是按值传递的,就像将标量变量作为相应参数一样。
  5. '。' 运算符用于访问成员。
差异:
// C program to illustrate differences
// between structure and Union
#include <stdio.h>
#include <string.h>

// declaring structure
struct struct_example
{
int integer;
float decimal;
char name[20];
};

// declaring union

union union_example
{
int integer;
float decimal;
char name[20];
};

void main()
{
// creating variable for structure
// and initializing values difference
// six
struct struct_example s={18,38,"geeksforgeeks"};

// creating variable for union
// and initializing values
union union_example u={18,38,"geeksforgeeks"};


printf("structure data:n integer: %dn"
"decimal: %.2fn name: %sn",
s.integer, s.decimal, s.name);
printf("nunion data:n integer: %dn"
"decimal: %.2fn name: %sn",
u.integer, u.decimal, u.name);


// difference two and three
printf("nsizeof structure : %dn", sizeof(s));
printf("sizeof union : %dn", sizeof(u));

// difference five
printf("n Accessing all members at a time:");
s.integer = 183;
s.decimal = 90;
strcpy(s.name, "geeksforgeeks");

printf("structure data:n integer: %dn "
"decimal: %.2fn name: %sn",
s.integer, s.decimal, s.name);

u.integer = 183;
u.decimal = 90;
strcpy(u.name, "geeksforgeeks");

printf("nunion data:n integer: %dn "
"decimal: %.2fn name: %sn",
u.integer, u.decimal, u.name);

printf("n Accessing one member at time:");

printf("nstructure data:");
s.integer = 240;
printf("ninteger: %d", s.integer);

s.decimal = 120;
printf("ndecimal: %f", s.decimal);

strcpy(s.name, "C programming");
printf("nname: %sn", s.name);

printf("n union data:");
u.integer = 240;
printf("ninteger: %d", u.integer);

u.decimal = 120;
printf("ndecimal: %f", u.decimal);

strcpy(u.name, "C programming");
printf("nname: %sn", u.name);

//difference four
printf("nAltering a member value:n");
s.integer = 1218;
printf("structure data:n integer: %dn "
" decimal: %.2fn name: %sn",
s.integer, s.decimal, s.name);

u.integer = 1218;
printf("union data:n integer: %dn"
" decimal: %.2fn name: %sn",
u.integer, u.decimal, u.name);
}
输出:
structure data:
 integer: 18
 decimal: 38.00
 name: geeksforgeeks

union data:
 integer: 18
 decimal: 0.00
 name: ?

sizeof structure: 28
sizeof union: 20

 Accessing all members at a time: structure data:
 integer: 183
 decimal: 90.00
 name: geeksforgeeks

union data:
 integer: 1801807207
 decimal: 277322871721159510000000000.00
 name: geeksforgeeks

 Accessing one member at a time:
structure data:
integer: 240
decimal: 120.000000
name: C programming

 union data:
integer: 240
decimal: 120.000000
name: C programming

Altering a member value:
structure data:
 integer: 1218
 decimal: 120.00
 name: C programming
union data:
 integer: 1218
 decimal: 0.00
 name: ?
在我看来,结构更好,因为在联合中共享内存时,歧义会更多。 

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com