c语言标量变量是什么,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;

};

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

两者都是用户定义的数据类型, 用于将不同类型的数据存储为一个单元。

它们的成员可以是任何类型的对象, 包括其他结构和联合或数组。成员也可以包含一个位字段。

结构和联合都仅支持赋值=和sizeof运算符。分配中的两个结构或联合必须具有相同的成员和成员类型。

结构或联合可以按值传递给函数, 并按值按函数返回。参数必须与函数参数具有相同的类型。结构或联合通过值传递, 就像标量变量作为相应参数一样。

‘。’运算符用于访问成员。

差异性

31408c57640a9c52db23fcaa3c898dc0.png

//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, "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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值