struct 结构体定义方式汇总

结构体变量定义方法多样,统计一下

直接定义"结构体变量"

——如果结构体只在局部使用(函数或.c文件),则可直接定义变量

struct person{

char name[8];

int age;

} p1;

先定义"结构体类型",再利用"结构体类型"名定义"变量"

——主要是为了重用该数据类型,有时候还用typedef重命名一个结构体。目的:如果某个结构体变量很常用,多个文件共用,就该先定义结构体类型,然后在不同的文件里定义变量。

struct person{

char name[8];

int age;

} ;

struct person p1,p2;

直接定义无类型名的结构体变量

——一般用在函数内部

struct {

char name[8];

int age;

} p1,p2;


因为用完即弃,没必要写类型名了。


嵌入式C语言中,常见例子

typedef重命名数据结构类型

  1. typedef struct cola  
  2. {  
  3.    intiNum;   
  4. } coco-cola,pesi-cola;

把结构体类型cola重命名为coco-cola,pesicola.


嵌入式链表例子

typedef struct _link_node
{  
element_type data;  
 struct _link_node *next; 
} link_node;


typedef link_node *link_list;  
/* 不等价于:typedef struct link_node *link_list; 多了个struct相当于重新声明一个结构体,和link_node类型无关。如果混淆会报错
  *bst.c:19: error: dereferencing pointer to incomplete type
  *参考http://blog.csdn.net/xzongyuan/article/details/21597471
  *表明link_list是一个指针类型,link_list声明的数据都是指针。
  *例如:link_list *list;
  *不等价于struct link_node *link_list; 这是声明一个link_list变量,仅仅
  *是变量,不是自定义类型。
  *typedef的作用就是通过重命名方式,把link_list定义为“指针类型”
*/


注意_link_node成员变量,它必须是指针类型的,如果是结构体类型,会造成结
构体递归嵌套,形成无穷大的结构体,这是不允许的。
上面两个typedef,第一个重名了结构体_link_node,第二个重名了“指针类型”
(要区分指针类型和指针变量的区别)link_list。这样做主要是考虑了可移植性。
用typedef定义了link_list类型后,就可以声明一个指针变量了:
link_list *list;
理解了原理后,上面两个代码可以让结构体类型和结构体指针类型一起定义


typedef struct _link_node{
     element_type data;   
     struct _link_node *next; 
} link_node,*link_list;




参考http://zhidao.baidu.com/link?url=-Et99w3FLLhpKxgNooE9gtsk48ERX88Uknfa4gh3su37s9fCG_IDWoBXpRVUAdbYOO435ZfdI_qHQiZTh4xab_


一个双向链表的结构体定义。typedef struct node *link;
先预声明 Link 为指向一个结构的指针类型,所有Link 定义的便量都是指针,并
且是指向一个结构的指针;
struct node{ int elem; link left; link right; }Node;结构体定义,同时定
义了一个结构体变量Node;
还可以换个方式更直观些
typedef struct node
{      
 int elem;       
 struct node *left;
 struct node *right;      }S_Node;
程序中用S_Node Node;来定义一个节点,或者
S_Node *pNode;来定义一个指向节点的指针,再用内存申请生成节点


创建结构体单链表的例子
http://blog.csdn.net/xzongyuan/article/details/21375449
有了上面的知识,再去理解单链表初始化就容易了。

构建二叉树的例子
http://blog.csdn.net/xzongyuan/article/details/21389195
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值