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 {..在其他地方声明tnode之后。 。};
typedef struct tnode *Treeptr;
Typedef是:typedef old-existing-type newtype;所以这里.. struct tnode *是必须已经存在的旧类型(必须在别处声明),而Treeptr是那个的同义词..但为什么我们不能将这个东西空间化?像这样:typedef struct tnode * Treeptr;
typedef int (*PFI)(char *, char *);
这里发生了什么? old-type是int和(* PFI)(char ,char )是int的同义词?如果int(* PFI)(char *,char *)是旧类型,那么new-type是什么?他的意思是说“实际上typedef就像#define,除了它由编译器解释,它可以处理超出预处理器能力的文本替换”?在上面提到的例子中..为什么预处理器不能做任何正在做的事情?
答案 0 :(得分:4)
所以在上面,是否创建了一个typedef“Treenode”AND声明 “struct tnode”?
是的,同一句话中有声明和typedef。
但为什么我们不能把这个东西放在空间?像这样:typedef struct tnode * Treeptr
如果你在谈论*
- 你可以。无论如何,这是一个单独的标记。
typedef int (*PFI)(char *, char *);
这是一个函数类型定义;
typedef int (*PFI)(char *, char *);
^ define a type called
^PFI as:
^ pointer
^to function
^that receives two char pointers as arguments
^ and returns an int
现在您可以使用PFI代替int (*)(char *, char *)
(当用作参数/变量时)
编辑:
使用函数指针的代码示例:
#include <stdio.h>
int add(int a, int b) { return a + b; }
typedef int (*pfi)(int,int);
int main()
{
pfi my_func = add;
int res;
res = (*my_func)(1,2);
printf( "add(1,2)=%d", res);
return res;
}