重拾C语言重要知识之结构体和共用体

定义结构体类型变量的方法

例如:

struct student

        int num

          char name[20]

          char sex

          int age

          float score

          char addr[30]

  student1,student2;

处理动态链表所需的函数

库函数提供动态地开辟和释放存储单元的

有关函数:

(1)malloc函数

其函数原型为void *malloc(unsigned int size);

作用是在内存的动态存储区中分配一个长度为

size的连续空间。此函数的值(即“返回值”)

是一个指向分配域起始地址的指针(类型为

void)。如果此函数未能成功地执行(例如内

存空间不足),则返回空指针(NULL)

2) calloc函数

        其函数原型为void *callocunsigned n,

unsigned size;其作用是在内存的动态存储区

中分配n个长度为size的连续空间。函数返回

一个指向分配域起始地址的指针;如果分配不

成功,返回NULL

        calloc函数可以为一维数组开辟动态存

储空间,n为数组元素个数,每个元素长度为

Size


(3) free函数

        其函数原型为void freevoid *p;其作用

是释放由p指向的内存区,使这部分内存区能

被其他变量使用。p是最近一次调用calloc

malloc函数时返回的值。free函数无返回值。

   以前的C版本提供的malloccalloc函数

得到的是指向字符型数据的指针。ANSI C提

供的malloccalloc函数规定为void类型。

共用体

例如:

union data                          union data

  int i                             int i;

       char ch                      char ch;

        float f                             float f

 }a,b,c;                              };union data a,b,c;

共用体和结构体的比较:

 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。

 共用体变量所占的内存长度等于最长的成员的长度。

共用体类型数据的特点

(1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。

(2) 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。 

(3) 共用体变量的地址和它的各成员的地址都是同一地址。

(4) 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,又不能在定义共用体变量时对它初始化。

(5) 不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针 

(6) 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。

枚举类型

枚举:将变量的值一一列举出来,变量的值只限于列举

出来的值的范围内。

 

申明枚举类型用enum

enum weekday{sunmontuewedthufrisat};

 

定义变量:

enum weekday workdayweek-day;

enum{sunmontuewedthufrisatworkday

变量值只能是sunsat之一


typedef定义类型

声明NUM为整型数组类型

typedef int NUM[100];

 

声明STRING为字符指针类型:

typedef char *STRING

 

声明POINTER为指向函数的指针类型,该函数返回

整型值

typedefint (*POINTER)() 

typedef定义类型的方法:

 

先按定义变量的方法写出定义体(如:int i)。

将变量名换成新类型名(例如:将i换成COUNT)。

在最前面加typedef

  (例如:typedef int COUNT)。

然后可以用新类型名去定义变量。

 

说明:

(1)typedef可以声明各种类型名,但不能用

来定义变量。

(2) typedef只是对已经存在的类型增加一个类型名,

而没有创造新的类型。

(3) 当不同源文件中用到同一类型数据时,常用

typedef声明一些数据类型,把它们单独放在一个文件

中,然后在需要用到它们的文件中用#include命令把

它们包含进来。

(4) 使用typedef有利于程序的通用与移植。

(5) typedef#define有相似之处,例如:

typedefint COUNT#define COUNT int的作用都是

COUNT代表int但事实上,它们二者是不同的。

#define是在预编译时处理的,它只能作简单的字符串

替换,而typedef是在编译时处理的。实际上它并不是

作简单的字符串替换,而是采用如同定义变量的方法

那样来声明一个类型。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值