话说结构体
来源:互联网 发布:荣威矩阵式led大灯 编辑:程序博客网 时间:2024/05/22 13:12
1. 结构体变量的声明
先看下面这个例子:
struct {
int number;
char name [NAME_LEN+1];
int on_hand;
} part1,part2;
这个两个结构体变量都有3个成员:number(零件的编号),name(零件的名称)和on_hand(现有数量)。struct{…}指明了类型,而part1和part2则是具有这种类型的变量。
但是该种声明,不常用,而且如果在程序中的不同位置什么变量,会出现什么问题呢?
struct {
int number;
char name [NAME_LEN+1];
int on_hand;
} part1;
struct {
int number;
char name [NAME_LEN+1];
int on_hand;
} part2;
答案是根据C语言规则,part1和part2不具有一致的类型,这样的话,不能把part1赋值给part2,也不能用它们来作为函数调用的参数。
为了解决该问题,C语言提高两种命名结构的方法:一是声明“结构标记”;二是使用typedef来定义类型名。
2. 结构标记的声明
结构标记(struct tag)是用于标记某种特定结构类型的名字。如下:
struct part{
int number;
char name [NAME_LEN+1];
int on_hand;
};
一旦产生了标记part,就可以用来声明变量了:
struct part part1,part2;
注意:结构标记只有在前面放置了单词struct才会有意义。
3. 结构类型的定义
typedef struct {
int number;
char name [NAME_LEN+1];
int on_hand;
} Part;
类型Part的名字必须出现定义的末尾,而不是字单词struct的后边。这样就可以像内置类型那样使用Part。如下:
Part part1,part2;
4. 结构体指针
从上例可以看出struct _node是结构标记;Node是结构体别名;*PNode是指向此类型结构体的指针。
但是下面这种声明形式是错误的。
typedef struct _node
{
char name[32];
pNode pNext;
} *pNode;
因为新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
- 话说结构体
- 话说
- 话说##
- 话说“浪漫”
- 齐叔有话说
- 话说分派
- 话说开篇
- 话说技术
- 话说 水浒传
- 话说多线程
- 话说罗盘
- 李阳有话说:
- 话说程序员
- 话说女人
- 话说勇敢
- 话说---记忆
- 话说精英
- 话说金融
- 将excel中的数据导入datagridview中
- Spring:JdbcTemplate使用指南
- delphi注册表操作完全手册
- TClientDataSet
- adotable中Filter的用法
- 话说结构体
- Failed to access IIS metabase”解决
- SQL中的CASE WHEN使用
- 走进WebKit [ 邓侃 ] 于:2009-05-19
- FlashFXP 2 FileZilla 将 FlashFXP 的站点文件 Sites.dat 或其导出的 *.ftp 站点信息文件转换为 FileZilla 的站点文件,以便导入到 FileZilla 中,实现 FTP 客户端从 FlashFXP 到
- The Dreadful Seven hdu 2599 为何错啊 ?非常纠结的,难道测试数据里面没有ctrl + Z的。。
- 复制后粘贴为灰色
- SysinternalsSuite
- ASP.Net中用C#实现站点计数器用户控件