全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指向结构的指针为了进一步说明指向结构的指针和结构数组,我们重新编写关键字统计程序,这次采用指针,而不使用数组下标。keytab的外部声明不需要修改,但main和binsearch函数必须修改。修改后的程序如下:#include #include #include #define MAXWORD 100int getword(char *, int);struct key *binsearch(char *, struct key *, int);/* count C keywords; pointer version */main()char wordMAXWORD;struct key *p;while (getword(word, MAXWORD) != EOF)if (isalpha(word0)if (p=binsearch(word, keytab, NKEYS) != NULL)p-count+;for (p = keytab; p count 0)printf(%4d %sn, p-count, p-word);return 0;/* binsearch: find word in tab0.tabn-1 */struct key *binsearch(char *word, struck key *tab, int n)int cond;struct key *low = &tab0;struct key *high = &tabn;struct key *mid;while (low word) 0)low = mid + 1;elsereturn mid;return NULL;这里需要注意几点。首先,binsearch函数在声明中必须表明:它返回的值类型是一个指向struct key 类型的指针,而非整型,这在函数原型及binsearch 函数中都要声明。如果binsearch找到与输入单词匹配的数组元素,它将返回一个指向该元素的指针,否则返回NULL。其次,keytab的元素在这里是通过指针访问的。这就需要对binsearch做较大的修改。在这里,low和high的初值分别是指向表头元素的指针和指向表尾元素后面的一个元素的指针。这样,我们就无法简单地通过下列表达式计算中间元素的位置:mid = (low+high) / 2 /* WRONG */这是因为,两个指针之间的加法运算是非法的。但是,指针的减法运算却是合法的,high-low的值就是数组元素的个数,因此,可以用下列表达式:mid = low + (high-low) / 2将mid设置为指向位于high和low之间的中间元素的指针。对算法的最重要修改在于,要确保不会生成非法的指针,或者是试图访问数组范围之外的元素。问题在于,&tab-1和&tabn都超出了数组tab 的范围。前者是绝对非法的,而对后者的间接引用也是非法的。但是,C 语言的定义保证数组末尾之后的第一个元素(即&tabn)的指针算术运算可以正确执行。主程序main中有下列语句:for (p = keytab; p keytab + NKEYS; p+)如果p 是指向结构的指针,则对p 的算术运算需要考虑结构的长度,所以,表达式p+执行时,将在p 的基础上加上一个正确的值,以确保得到结构数组的下一个元素,这样,上述测试条件便可以保证循环正确终止,但是,千万不要认为结构的长度等于各成员长度的和。因为不同的对象有不同的对齐要求,所以,结构中可能会出现未命名的“空穴“(hole)。例如,假设char类型占用一个字节,int类型占用4 个字节,则下列结构:struct char c;int i;可能需要8 个字节的存储空间,而不是5 个字节。使用sizeof 运算符可以返回正确的对象长度。最后,说明一点程序的格式问题:当函数的返回值类型比较复杂时(如结构指针),例如struct key *binsearch(char *word, struct key *tab, int n)很难看出函数名,也不太容易使用文本编辑器找到函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业营销管理的11项原则
- 《材料加工检测技术》教学大纲
- 教案第一课神奇的货币
- 玉溪师范学院《田径》2023-2024学年第一学期期末试卷
- 经济贸易毕业论文:中国外贸竞争力探究
- 玉溪师范学院《普通话与教师口语》2021-2022学年第一学期期末试卷
- 会计从业资格考试财经法规教案
- 建筑公司规章制度范本
- 销售部门年终工作总结课件模板
- 东南亚运动户外电商行业市场洞察
- 2024-2030年陕西省煤炭行业市场发展分析及发展前景预测研究报告
- 《中华人民共和国安全生产法》知识培训
- 【课件】Unit+3+SectionB+1a-2b+课件人教版英语七年级上册
- 干部人事档案任前审核登记表范表
- 期中阶段测试卷(六)-2024-2025学年语文三年级上册统编版
- 北京市昌平区2023-2024学年高二上学期期末质量抽测试题 政治 含答案
- 第7课《不甘屈辱奋勇抗争》(第2课时)(教学设计)-部编版道德与法治五年级下册
- 中国脑出血诊治指南
- 2024-2030年中国融资租赁行业市场发展分析及前景趋势与投资前景研究报告
- 吉安市市直事业单位选调工作人员真题
- 第12章全等三角形(压轴必刷30题4种题型专项训练)(原卷版)
评论
0/150
提交评论