使用typedef定义结构类型和结构体指针类型的别名
今天在写printfh函数的时候,部分代码未能通过编译,特此记录,防止以后再犯这样的错误
typedef struct person
{
/* data */
char *name;
int age;
char score;
} inform, *Pform;
Pform = inform * (p);
printf("arg3 \n.name=%s\t, .age=%d\t, .score=%c\n", Pform->name, Pform->age, Pform->score);
以上代码编译后出错
报错如下:
youngfar@youngfar-PC:/mnt/hgfs/Linux教程/mytest/myprintf$ gcc my_printf.c -o test -m32
my_printf.c: In function ‘my_printf’:
my_printf.c:33:11: error: expected identifier or ‘(’ before ‘=’ token
Pform = inform*(p);
^
my_printf.c:35:60: error: expected expression before ‘Pform’
printf("arg3 \n.name=%s\t, .age=%d\t, .score=%c\n", Pform->name, Pform->age, Pform->score);
错误:将Pform这一结构体类型的别名当成了定义好的结构体类型指针
注意:
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,注意是别名,不是变量(或指针变量)
typedef 和#define的作用类似(语法不同),就是起一个别名,这个别名在编译的预处理阶段的时候会被编译器解释。 inform为
struct person
{
/* content */
char *name;
int age;
char score;
};
这个结构体类型的别名,
同理,Pform不能说是结构体指针,只能说是这个结构体类型的指针的别名
具体使用
有了如下定义
typedef struct person
{
/* data */
char *name;
int age;
char score;
} inform, *Pform;
接下来,如要定义该结构体类型的变量可以这样写:
/*定义该结构体类型的变量*/
inform per = {
"youngfar", 18, 'A'};
如要定义该结构体类型的指针可以这样写:
/*定义该结构体类型的指针*/
Pform Pstr= (Pform)p;