使用typedef定义结构类型和结构体指针类型的别名

使用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;

猜你喜欢

转载自blog.csdn.net/qq_28816873/article/details/104442395