第六章讲的是结构,它提供了一种方法,让程序员通过组合已有的基本类型,构建自己的复杂类型的方法。
结构支持的操作不多,只有复制和赋值、取地址、访问其成员3种。对于复制和赋值,可以采用对于结构体的成员单个赋值的方法,也可以整体赋值,当结构体很大,复制产生的代价比较高昂时,也可以采用传递指针的方法。
对于结构体的一些操作,我们要时刻牢记的是“.”,“->”,“()”,“[]”的优先级是最高的。所以*p->str是对p结构的str成员解引,*p->str++是对str解引以后,在对str自增。++p->len是对len自增。
结构支持的操作不多,只有复制和赋值、取地址、访问其成员3种。对于复制和赋值,可以采用对于结构体的成员单个赋值的方法,也可以整体赋值,当结构体很大,复制产生的代价比较高昂时,也可以采用传递指针的方法。
对于结构体的一些操作,我们要时刻牢记的是“.”,“->”,“()”,“[]”的优先级是最高的。所以*p->str是对p结构的str成员解引,*p->str++是对str解引以后,在对str自增。++p->len是对len自增。
对于数据结构,有一个经典的例子,就是二叉树:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define MAXWORD 100
#define BUFSIZE 100 //缓冲区大小
char buf[BUFSIZE]; //缓冲区
int bufp = 0; //缓冲区索引
//二叉树
struct tnode
{
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
//注意,一个包含自身结构的实例是非法的,但是left和right都是指向tnode类型的指针,而不是实例
struct tnode *addTree(struct tnode* ,char *);
void treeprint(struct tnode *);
int getword(char* ,int);
struct tnode *tallo