本帖最后由 Hakon 于 2018-10-15 02:40 编辑
这排版看得我要死了……
在 C 里也不是非得用 typedef 来给结构体起个别名。然后声明归声明,定义归定义,声明没实例,定义有实例,一定要分清楚。
以下是示例的 C 代码:
[C] 纯文本查看 复制代码 #include <stdio.h>
// 声明一个结构体
struct node
{
int val;
};
typedef struct node Node; // 结构体的别名
// 整个结构体声明是一条语句,所以可以直接使用 typedef 取别名
typedef struct elder
{
char val;
}Elder;
// 直接使用 typedef 的情形可以省略原名,但不推荐
typedef struct
{
float val;
}NoName;
int main(void)
{
struct node instance; // 直接用结构体类型生成结构体对象
instance.val = 1;
Node another; // 使用别名生成结构体对象
another = instance; // 复制 instance 的内容
printf("another.val = %d\n", another.val);
struct elder elderInstance; // 直接用结构体类型生成结构体对象
elderInstance.val = 'c';
Elder elderAnother = elderInstance;
printf("elderAnother.val = %c\n", elderAnother.val);
NoName noName;
noName.val = 3.14f;
printf("noName.val = %.2f", noName.val);
return 0;
}
C++ 中声明结构体可以使用和 C 相同的方式。此外,在 C++中还允许为结构体添加函数成员:
[C++] 纯文本查看 复制代码 #include <cstdio>
// 声明一个结构体
struct node
{
int val;
void PrintVal() // 你可以在 C++ 中为结构体增加函数成员
{
printf("this.val = %d\n", val);
}
};
typedef struct node Node; // 结构体的别名
int main(void)
{
struct node instance; // 直接用结构体类型生成结构体对象
instance.val = 1;
Node another; // 使用别名生成结构体对象
another = instance; // 复制 instance 的内容
another.PrintVal();
return 0;
}
|