现在的位置: 首页 > 综合 > 正文

自定义类型

2012年08月07日 ⁄ 综合 ⁄ 共 1576字 ⁄ 字号 评论关闭

     在c语言中,因为没有面向对象中类的概念,所以复杂类型不多。下面一一介绍。

     在介绍复杂类型之前,上节还忘记了介绍一个类型void。void这个类型比较特殊,目前为止,它只能使用在函数返回值类型中,表示该函数执行完毕后什么都不返回。void不能作为声明类型来声明变量。

     现在开始将复杂类型。首先我们要介绍一下struct类型。struct其实就是c中的自定义类型,它能同时表示同一个对象的共有数据结构。比如我们需要研究一个班级,那么不同的班级中有很多共有属性,比如班级名称,班主任等等。这些属性能组成一个完整的班级,那么我们要在c中表示一个班级,如果还是使用char name[10],char master[10],这样声明单个班级的话还算简单,如果我同时需要表示5个班级呢?如果再这样声明就显得非常的繁琐,所以就出现了struct。我们可以先把单个班级的属性定义为一个数据结构,然后再用这个数据结构作为类型声明对象即可。如

struct class
{
       char name[10];
       char master[10];
}

       这样,我们如果需要声明班级的话,那么只要声明struct class class1,class2,即可,是不是方便了很多?方便的同时一定要记住;在声明struct类型时,一定要带上struct这个关键字,除非你使用连体声明或者使用typedef定义一个类型。

       那么在我们的struct中,还能声明函数指针,想起了什么?面向对象吧!所以,不是非得oo的语言才能做oo的事情

      下来说说enum。这个是枚举。什么是枚举呢?就是有一组值,然后我们同时能表示这组值中的一个或者几个值。枚举值其实是int型的变量,可以自定义或者是自动生成。自动生成第一个从0开始,一般递增为1;自定义由编程人员自己决定。那么定义枚举的情况为:比如我们一个星期有7天,那么我们就能声明一个星期枚举,然后每天都是一个值。枚举基本上在正式的编程中为了简单起见还是介意同时只有一种情况为好。当然一些位枚举是可以多个枚举值通过“或”的形式来取得的。对于enum,定义的形式类似于struct,声明的形式也和struct一样,就是赋值的时候介意只通过枚举值赋值。

enum week
{
      sun,//默认为0
      mon = 2,//自定义值为2
     tue,//根据前一个值,这个值递增为3
}
那么声明的时候也是和struct一样:week wk,赋值为wk = mon;或者是wk = 2;

      union这个叫共同体。共同体是从他内存的表现形式上的叫法。从编程角度上应该叫互斥唯一体更合适。为什么呢?因为当我们定义了一个union类型,那么他在内存中的表示为:申请该类型中最大的一个变量内存量来存储变量,而且同一时刻只能存储该union中的一个子变量。看一个例子:

union class
{
   char name[10];
     char full_name[20];
}
 

      当我们定义了union的class后,用class声明一个变量,class class1,那么这个时候,class1的内存为20和char不是30和char,因为使用最长的自变量类型内存表示长度。对class1赋值的时候,你只能对name或者full_name赋值,不能同时对name和full_name赋值。

     在我们编程的时候,经常看到有size_t,或者bufsize_t这种类型出现。这些类型一般都是unsinged的int或者是long。这些类型哪里来的呢?其实都是有typedef定义的。typedef其实是一个“预处理”,他主要就是用来定义一个类型。那些类型可以是回调函数指针类型,但是一般还是定义类似于size_t这种类型。其实typedef还可以和struct合用,想想怎么用?有什么好处?

抱歉!评论已关闭.