📜  C语言中的结构和联合之间的区别

📅  最后修改于: 2021-05-26 01:20:56             🧑  作者: Mango

C中的结构

结构是C语言中可用的用户定义数据类型,它允许组合不同种类的数据项。结构用于表示记录。
定义结构:要定义结构,必须使用struct语句。 struct语句定义了一个新数据类型,该数据类型具有一个或多个成员。 struct语句的格式如下:

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

联盟

联合是C语言中可用的特殊数据类型,它允许在同一内存位置存储不同的数据类型。您可以定义具有多个成员的联合,但是在任何给定时间只能有一个成员包含一个值。联合提供了一种有效的方式,可以将同一内存位置用于多种用途。
定义并集:要定义并集,您必须以与定义结构时相同的方式使用并语句。 union语句为您的程序定义了一个新数据类型,该数据类型具有多个成员。联合声明的格式如下:

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

结构和联合之间的相似之处

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

差异:

C
// C program to illustrate differences
// between structure and Union
#include 
#include 
  
// declaring structure
struct struct_example
{
    int integer;
    float decimal;
    char name[20];
};
  
// declaraing 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: %d\n"
                "decimal: %.2f\n name: %s\n",
                s.integer, s.decimal, s.name);
    printf("\nunion data:\n integeer: %d\n"
                 "decimal: %.2f\n name: %s\n",
                u.integer, u.decimal, u.name);
  
  
    // difference two and three
    printf("\nsizeof structure : %d\n", sizeof(s));
    printf("sizeof union : %d\n", 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: %d\n "
                "decimal: %.2f\n name: %s\n",
            s.integer, s.decimal, s.name);
      
    u.integer = 183;
    u.decimal = 90;
    strcpy(u.name, "geeksforgeeks");
      
    printf("\nunion data:\n integeer: %d\n "
                "decimal: %.2f\n name: %s\n",
            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: %s\n", 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: %s\n", u.name);
      
    //difference four
    printf("\nAltering a member value:\n");
    s.integer = 1218;
    printf("structure data:\n integer: %d\n "
                " decimal: %.2f\n name: %s\n",
                s.integer, s.decimal, s.name);
      
    u.integer = 1218;
    printf("union data:\n integer: %d\n"
           " decimal: %.2f\n name: %s\n",
            u.integer, u.decimal, u.name);
}


输出:

structure data:
 integer: 18
 decimal: 38.00
 name: geeksforgeeks

union data:
 integeer: 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:
 integeer: 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: ?
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。