当前位置:C++技术网 > 资讯 > C语言基础教程:6 复合类型引入--数组和结构体

C语言基础教程:6 复合类型引入--数组和结构体

更新时间:2015-08-21 17:25:47浏览次数:1+次

    C语言里的复合类型有好几种,但常用的不过数组结构体,所以我这讲就重点讲解数组和结构体。等这两个学明白了,其他几种复合类型自然也就懂了,只是一句话点一下就好。

 数组,剖开来讲就是数的组合。只不过这边有个限制即这些数的类型(第三讲有讲)必须一样,或许你会问:“这是为什么呢?”,是啊!为什么呢?因为当初设计数组时就是为的处理同类型的数据。而结构体呢解决的不是数组只能处理同类型这个缺陷(很多书上没有提到与数组的关系),结构体是为了弥补基本内置数据类型的不足而诞生的(当然结构体的作用远不止于此,比如链表的使用)上面的讲解都很死板,下面来具体说说。

 如何定义一个数组呢?基本语法如下:数据类型  数组名[数组长度]

 如 int temp[10]; 这就定义了一个长度为10的整型数组。数据类型是为了说明这个数组存放的是int型数据,数组长度是表征的这个数组存放了多少个元素,数组名代表着数组在内存中的起始位置

 关于数组,里面有这几个关键的地方需要大家学习一下:

 数组是在栈空间的(何为栈空间,这个后边会有专门文章讲解。这边提及它就是想让大家学的完整些)

 数组的地址空间是连续的(这个不同于链表)

 数组名究竟为啥?(关于这个以及与指针的关系我会专门写几篇文章来讲解,这里边有大文章)暂且当作数组空间的起始地址

 数组元素的类型相同

 好了上面几个重点交代好了就来说说数组的其他方面。

  int temp[10]={1,2,3,4,5,6,7,8,9,10};这个语句的意思是定义一个存放10个元素的整型数组并初始化。那么我们如何引用数组里面的数据呢?格式如下:数组名[下标];

  如temp[0],值得注意的是数组下标从0开始,最后一个下标为数组长度-1,可不能访问越界了。如temp[10]则是错误的。如果数组不初始化,则数组里面的数据是垃圾数据,这是由于栈本身的特性决定的。关于初始化的其他一些值得一提,因为项目开发中经常要用到这个特性。如果这样定义int temp[10]={1},那么后边的9个元素将自动初始化为0;即使是

  char temp[10]={0},后边的9个元素依旧被初始化为0,有些书上说的是’\0’,其实这两个是一样的,因为’\0’所对应的ASCII即为0;如果你看过前边的教程,你就会知道,char与int其实并没有多少区别。说了这么多,如果不看看数组的真实情况就真没啥子意思了,就好像去了泰山没能看到日出一样。

每个元素占据四个字节是因为int类型占据四个字节。

  上面的就是一维数组的基本知识点,那么何为二维数组呢?很简单的回答便是数组的元素本身是一个一维数组(其实没必要说什么二维平面,什么三维数组就是空间,那四维数组又作何解释呢?为什么不讲情事物的本质为了好理解没错,但至少要讲清楚事物的本质吧,书本教育的悲哀!),关于二维数组甚至于n维数组,也是高级教程里的内容,二维数组绝对不是老师说的二维平面,你可以先看看网站的那篇关于高阶数组的文章,那才是最为核心的东西。

  结构体是什么?呵呵,其实结构体是我们程序员根据实际问题自己定义的数据类型,举个简单例子。学生去体检,那么这个学生的基本信息大致如下:姓名 性别 年龄 身高 体重等等,那么C语言该如何表示这样一个较为综合的类型呢?C语言的设计者当时就想到了结构体(struct)。基本语法如下:结构体关键字 [结构体名]{数据域}

struct student{

                            char name[20];

                            char sex[10];

                            int height;

                            int weight;

}

其实结构体本身有点面向对象的意思了,那个是面向对象编程的话题了,在这稍微提下也未尝不可。

  那么我们该如何使用这个自定义类型呢?很简单就如同int定义一个变量一样,用法如下struct student temp;定义了一个temp变量,其其类型为struct student,那么我们如何使用这个变量呢?用temp.name即可。当然结构体指针访问的方法也可以访问,但作为入门教程,先掌握这个方法就够了。一直用struct student去定义一个变量难免会觉得有点麻烦,还好当初的智者们也考虑到了这个问题,解决的方法就是用typedef关键字来解决,如下

typedef struct student {

                            char name[20];

                            char sex[10];

                            int height;

                            int weight;

}STU

现在就可以用STU去定义变量了如STU temp

typedef的作用就是为某个变量起一个别名,关于这个特性在函数指针里面用的特别多,在工程开发中用的也特别多。稍微注意下就可以。结构体在内存中的实际情况我就不给大家看了,倒不是我小气,只是因为你看完会很奇怪的,因为这又涉及到结构体对齐的问题,那个我会在高级篇里给大家讲解的。结构体的用途很广泛,可以说面向对象编程的基础就是结构体(当然那边称之为类)

 那么什么是结构体数组呢?聪明的你大概已经猜到了吧,就是数据类型为结构体的数组。这种用法在PE头文件里太多了,当然在其他场合用的也很多。这个知识点我也打算放在高级教程里,毕竟这才是入门教程嘛!

有任何不清楚的问题都可以问我QQ969722243

跟多精彩教程请大家访问C++技术网