C结构体总结_20150921

C结构体总结

  结构体是一种构造类型,所谓构造类型即由基本类型(整型、字符型等)组合而成。结构体不同于数组,前者可以存放不同类型的数据,而后者只能存放相同类型的数据。

  结构体类型的定义如下

struct 结构体名
{
    类型1 成员1;
    类型2 成员2;
    ...
    类型n 成员n;
};

需要特别注意一下几点:

(1)末尾花括号后面的分号不可缺少
(2)结构体中的成员名可以和程序中其他变量同名,互不干扰
(3)使用结构体类型时,“struct 结构体名”作为一个整体 表示某种特定的结构体类型
(4)结构体类型的成员可以是基本数据类型,也可以是已经定义的结构体类型。也即,结构体的定义可以嵌套,但嵌套的结构体类型必须是已经定义好的

例如

struct date
{
    int year;
    int month;
    int day;
};  
struct stu
{
    char id[10];
    char name[10];
    int score;
    struct date birthday;   //嵌套定义
};

  结构体成员的引用使用成员操作符”.”,格式为 结构体变量名.成员名,特别注意:
(1)结构体变量不能整体输入输出,只能以成员作为基本变量逐个操作
(2)同种类型的结构体变量可以直接赋值,其实是各成员逐个赋值
(3)嵌套结构体变量的引用使用成员操作符逐级访问,比如student.birthday.year;

结构体指针和数组

struct stu
{
    char name[10];
    int score;
}student[3], *pStu;     //定义了结构体数组student[3]和结构体指针pStu

需要注意的是,结构体变量名不同于数组名,并不代表该结构体的首地址。
  使用结构体指针访问它所指向结构体变量的成员,可以使用(*pStu).name或者pStu->name(NOTE:箭头操作符“->”访问结构体成员仅限于结构体指针,而不是结构体变量,如student[0]->name是错误的)

链表

  C常使用结构体构造链表,链表由一系列结点组成,每个结点包括数据域和指针域两部分。其中数据域存储数据元素,指针域存储下一个结点的内存地址。链表的内容还是比较好理解的,在数据结构里介绍的非常详细,这里仅以单链表为例总结一下结构体在链表中的使用和常见误区。

typedef struct node
{
    int data;
    struct node *next;
} Node, *pNode;

上面这种类型重定义在数据结构中比较常见,等价于

struct node
{
    int data;
    struct node *next;
};
typedef struct node Node;
typedef struct node *pNode;

这样,以后便可以用Node定义struct node型结构体变量,用pNode定义struct node*型结构体指针。

  另外,需要注意链表中头结点和头指针的区别。以上面定义的struct node类型结构体为例,头结点的类型是struct node,包含数据域和指针域;头指针的类型是struct node*,仅仅是指向struct node型结构的指针,没有数据域和指针域之说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值