C语言中结构与并集的区别

C语言中的结构

null

结构是C语言中可用的用户定义的数据类型,允许组合不同类型的数据项。结构用于表示记录。

定义结构: 要定义结构,必须使用 结构 陈述struct语句定义了一个新的数据类型,其中包含多个或等于一个成员。struct语句的格式如下:

   struct [structure name]   {       member definition;       member definition;       ...       member definition;   };

协会

union是C中可用的一种特殊数据类型,允许在同一内存位置存储不同的数据类型。可以定义包含多个成员的联合,但在任何给定时间,只有一个成员可以包含一个值。联合提供了一种将同一内存位置用于多种目的的有效方法。

定义工会: 要定义联合,必须使用 协会 语句的方式与定义结构时的方式相同。union语句为您的程序定义了一个包含多个成员的新数据类型。工会声明的格式如下:

    union [union name]    {       member definition;       member definition;       ...       member definition;    };

结构与结合的相似性

  1. 两者都是用户定义的数据类型,用于将不同类型的数据存储为单个单元。
  2. 它们的成员可以是任何类型的对象,包括其他结构、联合或数组。成员也可以由位字段组成。
  3. 结构和联合都只支持assignment=和sizeof运算符。赋值中的两个结构或联合必须具有相同的成员和成员类型。
  4. 结构或联合可以按值传递给函数,也可以按值返回给函数。参数的类型必须与函数参数的类型相同。结构或并集通过值传递,就像标量变量作为相应的参数一样。
  5. ‘.’ 运算符用于访问成员。

差异:

图片[1]-C语言中结构与并集的区别-yiteyi-C++库

C

// 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: integer: %d"
"decimal: %.2f name: %s" ,
s.integer, s.decimal, s.name);
printf ( "union data: integer: %d"
"decimal: %.2f name: %s" ,
u.integer, u.decimal, u.name);
// difference two and three
printf ( "sizeof structure : %d" , sizeof (s));
printf ( "sizeof union : %d" , sizeof (u));
// difference five
printf ( " Accessing all members at a time:" );
s.integer = 183;
s.decimal = 90;
strcpy (s.name, "geeksforgeeks" );
printf ( "structure data: integer: %d "
"decimal: %.2f name: %s" ,
s.integer, s.decimal, s.name);
u.integer = 183;
u.decimal = 90;
strcpy (u.name, "geeksforgeeks" );
printf ( "union data: integer: %d "
"decimal: %.2f name: %s" ,
u.integer, u.decimal, u.name);
printf ( " Accessing one member at time:" );
printf ( "structure data:" );
s.integer = 240;
printf ( "integer: %d" , s.integer);
s.decimal = 120;
printf ( "decimal: %f" , s.decimal);
strcpy (s.name, "C programming" );
printf ( "name: %s" , s.name);
printf ( " union data:" );
u.integer = 240;
printf ( "integer: %d" , u.integer);
u.decimal = 120;
printf ( "decimal: %f" , u.decimal);
strcpy (u.name, "C programming" );
printf ( "name: %s" , u.name);
//difference four
printf ( "Altering a member value:" );
s.integer = 1218;
printf ( "structure data: integer: %d "
" decimal: %.2f name: %s" ,
s.integer, s.decimal, s.name);
u.integer = 1218;
printf ( "union data: integer: %d"
" decimal: %.2f name: %s" ,
u.integer, u.decimal, u.name);
}


输出:

structure data: integer: 18 decimal: 38.00 name: geeksforgeeksunion data: integer: 18 decimal: 0.00 name: ?sizeof structure: 28sizeof union: 20 Accessing all members at a time: structure data: integer: 183 decimal: 90.00 name: geeksforgeeksunion data: integer: 1801807207 decimal: 277322871721159510000000000.00 name: geeksforgeeks Accessing one member at a time:structure data:integer: 240decimal: 120.000000name: C programming union data:integer: 240decimal: 120.000000name: C programmingAltering a member value:structure data: integer: 1218 decimal: 120.00 name: C programmingunion data: integer: 1218 decimal: 0.00 name: ?

在我看来,结构更好,因为当记忆在联合体中共享时,歧义会更多。 结构与联合测验 本文由 哈里什·库马尔。 如果你喜欢GeekSforgeks并想贡献自己的力量,你也可以用write写一篇文章。极客。组织或邮寄你的文章进行评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享