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;
};
结构与联合之间的相似之处
- 两者都是用户定义的数据类型, 用于将不同类型的数据存储为一个单元。
- 它们的成员可以是任何类型的对象, 包括其他结构和联合或数组。成员也可以包含一个位字段。
- 结构和联合都仅支持赋值=和sizeof运算符。分配中的两个结构或联合必须具有相同的成员和成员类型。
- 结构或联合可以按值传递给函数, 并按值按函数返回。参数必须与函数参数具有相同的类型。结构或联合通过值传递, 就像标量变量作为相应参数一样。
- ‘。’运算符用于访问成员。
差异性
//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: ?
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
评论前必须登录!
注册