typedef struct和struct

1

我们知道typedef在许多编程语言中被用来为复杂的声名定义一个或多个简单的别名,它本身不创建新的类型,只为现有类型增加同义词,但那天同时看到typedef struct和struct还是让我感觉有点乱,现整理总结如下:

一、typedef struct和struct的区别与联系

在C语言中,假如我们用typedef struct为student的结构体创建了一个别名stu:

/* 例1 */
typedef struct student{
    int id;
    char *name;
}stu;

那么我们在声名变量时,使用如下格式即可:

stu ZhangSan,LiSi;

而如果我们用struct 定义一个student的结构体,如下:

/* 例2 */
struct student{
    int id;
    char *name;
};

那么我们在声名变量时,就必须使用如下格式:

struct student ZhangSan,LiSi;

从上面可以看到:stu是struct student的别名,在声名变量的时候,其实stu = struct student。

另外,例1 中省略结构体名字student,效果是一样的:

/* 例3 */
typedef struct{
    int id;
    char *name;
}stu;

显然,例1 = 例2 + (typedef struct student stu;

二、C语言中的typedef

1.为已知类型添加同义词,来定义与平台无关的类型,如标准库中的:

typedef int size_t;

如果需要跨平台,则只需修改typedef的定义即可。

2.为同一个struct结构体定义多个不同的别名(不过好像用处不大):

typedef struct student{
    int id;
    char *name;
}aaa,bbb,ccc;

这样既可以用aaa ZhangSan;来声名,也可以用bbb ZhangSan; ccc ZhangSan。

3.有指针的情况下,typedef比#define宏定义更安全,如下面的例子:

typedef char *pStr1;
#define pStr2 char *;

pStr1 s1, s2;
pStr2 s3, s4;

我们会发现:s1、s2、s3都被声名成char*,而s4则被声名成char。

注:C++中的typedef用法好像略有差别,此处暂不讨论。

一条评论

Leave A Reply