天天看点

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;  

注意_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