本文介绍: 如果匹配,则答案是肯定的。新节点的存储空间通过 talloc 例程获取,它返回一个指针,指向一段适合保存树节点的可用内存空间,而新单词通过 strdup 被拷贝到一个隐藏的内存空间。在每个节点上,它打印左子树(所有比当前节点单词小的),然后是当前节点上的单词,然后是右子树(所有比当前节点单词大的)。如果 p 是指向结构体的指针,对 p 的指针运算会将结构体的大小考虑在内,因此 p++ 能正确地对 p 递增,使其指向结构体数组的下一个元素,而 for 循环中的判断条件能在正确的时候停止循环。
6.4 结构体指针
为了说明结构体指针和数组的某些注意事项,我们把上一节的关键字计数程序再写一次,不过这回使用指针而不是数组下标。
keytab 的外部声明不需要动,但 main 和 binsearch 确实需要修改。
这里有几个地方值得一提。首先,binsearch 的声明必须指出它返回 struct key 的指针而不是(第三章版本里面的)整数;在函数原型和 binsearch 内部都声明了这一点。如果 binsearch 找到一个单词,则返回其指针;若没找到,则返回NULL。
第二,keytab 的元素现在通过指针和不是数组下标来访问。这要求对 binsearch 做大改。
low 和 high 的初始化表达式现在分别是指向表的开头和结尾的指针。
6.5 自引用结构体
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。