C语言笔记之结构体和共用体

结构体由若干成员组成,各个成员可以是不同的类型。在程序中使用结构体类型,必须先对结构体的组成进行描述(定义)

关键字struct是结构体类型的标志。用大括号括起来的是对各个成员的描述(定义)

Struct 结构体名

{成员表};

成员表的说明形式为: 类型名 成员名;

  1. 结构体只是指定了一种类型,无具体的数据,系统不分配实际内存单元。
  2. 结构体类型的成员可以是任何基本数据类型,而且可以是已经定义的结构体类型。

注意:结构体末尾的分号不能省略。

结构体类型定义了相应的变量之后才能使用,因为之前没有分配内存空间。

1,,先定义结构体类型,再定义变量:

Struct 结构体名

{成员表};

Struct 结构体名 变量名表;

系统为结构体变量分配的内存单元是连续的。所占内存空间可以用sizeof(变量/类型标识符)求出。

2,再定义结构体类型的同时定义变量

Struct 结构体名

{成员表} 变量名列表;

3,直接定义结构体类型变量;这种就是不出现结构体名,缺点就是下次再引用结构体就必须全部重写一遍。

在引用结构体变量时,一般只能对其成员进行直接操作,而不能对结构体变量整体进行操作。

结构体变量名.成员名

运算符“.”为成员运算符,结合性从左到右

结构体变量和其他变量一样,可以在定义的同时进行初始化。

结构体类型 结构体变量名={初始化值表};

结构体数组:一个结构体变量中可以存放一组数据(一个学生的信息:学号、姓名、成绩等),如果有10个学生的信息要进行处理,就要用结构体数组。结构体数组中的每个元素都是一个结构体类型的变量,他们都分别包含各个成员项。

指向结构体变量的指针只能指向同一结构体类型的变量和数组元素,不能指向结构体变量的成员。

定义了结构体指针变量并使它指向某以结构体变量后,就可用指针变量来间接引用对应的结构体变量了。引用结构体变量x的成员有以下三种方法:

(1)x.成员名;

(2)(*p).成员名;

(3)p->成员名。

由于.的优先级高于*,所以(2)中的圆括号不能省略,(3)中的运算符->称为指向运算符,优先级和.一样。

定义函数时,函数的返回值可以是一个结构体,也可以是一个指向结构体的指针

结构体变量做函数的参数,在函数调用时要先为形参结构体变量分配存储单元,并将实参结构体变量的值复制到形参结构体变量中.

用指向结构体变量的指针做函数的参数,函数调用时传递结构体变量的地址.

链表

链表是一种常见的数据结构.他是动态的进行存储分配的一个结构.众所周知,用数组存放数据,必须先定义数组的长度(也就是元素的个数)   而链表是程序执行时分配内存单元.

链表中的每一个元素称为节点,每个节点用一个结构体数据表示,包括若干个数据成员和一个指针成员(*即指向同类型节点的指针变量)节点中的指针成员指向下一个节点(即存放下一个节点的首地址).最后一个节点的指针成员为空指针(NULL),它表示不指向任何节点.

静态链表:在程序执行过程中,不可能认为的再产生新的存储单元,也不可能人为的释放用过的存储单元.

链表是一种动态分配存储空间的数据结构,即在需要时才会分配存储单元.C语言编译系统提供了如下处理动态链表的函数,他们的头文件为stdlib.h

1,malloc函数:   void *malloc(unsigned int size);

功能:在内存的动态存储区中分配一个长度为size的连续空间,若成功,则返回所分配的空间的起始地址;若不成功(如内存不足),则返回指针(NULL).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值