c primer plus Chapter 14 p383

第十四章 结构和其他数据形式

程序清单14.2 manybook.c程序

 

 

其中有一行while条件的表达式:while(count < MAXBKS &&  gets(library[count].title) != NULL && library[count].title[0] != '/0')

这句话写得真是很好。用别的语句都是不好替代的。第一个条件,count < MAXBKS,判断总共的书的册书是不是超过最大限制了。第二个条件,gets(library[count].title) != NULL,首先,它的作用不仅是判断,还有个gets用来输入的关键字,也就是说是等待输入,然后判断输入的是不是文件结束符之类的,如果在最后运行的时候输入ctrl-z(windows Dev-C++),这个条件就不符合,跳出这个while循环;第三个条件library[count].title[0] != '/0',检测字符串的第一个字符是否为空字符,如果用户在输入行的开始就按了回车键,将输入空字符串,将结束循环。

 

在while下面的程序块中,接收并处理完应有的数据后,还有个清空输入行的操作:

while(getchar() != '/n')

      continue;   

 

 

例子清单14.4 friends.c

struct guy *him;

him = &fellow[0];  //him为指向结构的指针

him->income和(*him).income的内容一样。

 

结构体的特性

现在的c允许把一个结构赋值给另一个结构,不能对数组这样做。也就是说,如果n_data和o_data是同一类型的结构,可以像下面这样做: o_data = n_data;

这就使o_data的每个成员都被赋成n_data相应成员的值,即使有一个成员是数组也照样完成赋值

 

结构,还是指向结构的指针

假设必须写一个与结构有关的函数。应该用结构指针作为参数,还是用结构作为参数和返回值呢?每种方法都有它的长处和不足。

把指针作为参数的方法的两个优点是:它既工作在较早的c实现上,也工作在较新的c实现上,而且执行起来很快;只需传递一个单个地址。  缺点是缺少对数据的保护。不过ANSI C中新增的const限定词解决了这个问题。

把结构作为参数传递的一个优点是函数处理的是原始数据的副本,这就比直接处理原始数据安全。

通常,程序员为了追求效率而使用结构指针作为函数参数;当需要保护数据、防止意外改变数据时对指针使用const限定词。

传递结构值是处理小型数据最常用的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值