C系列:结构struct与联合union

结构(struct) 是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构中可以使用不同的数据类型。
定义结构变量的一般格式为:
[quote]struct 结构名 {
类型 变量名;
类型 变量名;
...
} 结构变量; [/quote]
结构的初始化/赋值以及输出:
(1)标准定义,在定义结构类型的同时说明结构变量
[quote]struct stru{
int pureSize;
char *pureStr;
} *pure, insted;

struct stru ins = {pureSize:32, pureStr:"o223jflsdfa"}; /* 一站式赋值 */
/* insted.pureSize = 32; // 分步赋值
insted.pureStr = "o223jflsdfa"; */
pure = &ins; /* 将地址赋给结构变量为pure的指针*/
printf("pureSize=%d, pureStr=%s\n", pure->pureSize, pure->pureStr); /* 输出 */

Result:pureSize=32, pureStr=o223jflsdfa[/quote]

(2)用typedef来声明结构,在定义结构类型的同时说明结构变量
[quote]typedef struct stru{
int pureSize;
char *pureStr;
} *pure, insted; /*insted = {56, "23fslffsf222"}; 直接初始化*/

/* insted ins = {pureSize:56, pureStr:"23fslffsf222"}; 一站式赋值 */
insted ins; /* 分步赋值,[b]由于引用别名,所以这里要定义新的结构名ins[/b] */
ins.pureSize = 56;
ins.pureStr = "23fslffsf222";
pure p2 = &ins; /* 将地址赋给别名为pure的指针,[b]由于引用别名,所以这里要定义新的结构名p2[/b] */
printf("%d, %s\n", p2->len, p2->str);

Result:56, 23fslffsf222[/quote]
(3)直接说明结构变量,省去结构名,一般在函数内部声明
[quote]struct {
int size;
char *str;
} *pstr, p;

p.size = 44;
p.str = "sdfsf";
pstr = &p; /* 将地址赋给结构变量为pstr的指针*/
printf("Size=%d, Str=%s\n", pstr->size, pstr->str);
printf("Size=%d , Str=%s\n", (*pstr).size, (*pstr).str); /* 必须有()括起来,因为 . 的优先级比 * 高 */

Result:Size=44, Str=sdfsf[/quote]
联合的声明与访问和结构相同,这里就省略之,下面描述一下[b]联合与结构的区别[/b]:
[quote]1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合转只存放了一个被选中的成员, 而结构的所有成员都存在(联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量,而结构的所有成员都保持独立)。
2. 对于[b]联合的不同成员赋值, 将会对其它成员重写[/b], 原来成员的值就不存在了, 而对于[b]结构的不同成员赋值是互不影响的[/b]。 [/quote]
以上例子在 gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)运行通过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值