个性化阅读
专注于IT技术分析

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

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语言中的结构和联合之间的区别1
//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];
};
   
//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, "srcmini" };
   
     //creating variable for union 
     //and initializing values
     union union_example u={18, 38, "srcmini" };
   
           
     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, "srcmini" );
       
     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, "srcmini" );
       
     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: srcmini

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: srcmini

union data:
 integeer: 1801807207
 decimal: 277322871721159510000000000.00
 name: srcmini

 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: ?

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0)
未经允许不得转载:srcmini » C语言中的结构和联合之间的区别

评论 抢沙发

评论前必须登录!