【发布时间】:2011-10-11 11:43:22
【问题描述】:
typedef struct tnode { ... } Treenode;
既然 typedef 不能为我们创建一个新类型,那么这部分是“struct tnode”的声明吗?那么在上面,它是创建一个typedef“Treenode”并声明“struct tnode”吗?
return (Treeptr) malloc(sizeof(Treenode));
在这里,由于 Treenode 是整个“struct tnode”声明的同义词,是否有必要将整个声明传递给 sizeof 或者可以只做: sizeof(struct tnode) 在通过 struct tnode { .. . };
typedef struct tnode *Treeptr;
Typedef 是:typedef old-existing-type newtype;所以在这里.. struct tnode * 是必须已经存在的旧类型(必须在其他地方声明),而 Treeptr 是它的同义词.. 但是为什么我们不能间隔这个东西呢?像这样:typedef struct tnode * Treeptr;
typedef int (*PFI)(char *, char *);
这里发生了什么?旧类型是 int 和 (*PFI)(char , char) 是 int 的同义词??如果 int (*PFI)(char *, char *) 是旧类型,那么新类型是什么?他说“实际上 typedef 就像 #define 一样,只是因为它是由编译器解释的,所以它可以处理超出预处理器能力的文本替换”是什么意思?在上面提到的例子中..为什么预处理器不能做正在做的事情??
【问题讨论】:
标签: c