返回第五十三章 尾声(一)(1 / 2)程序媛养成计划首页

通过讲解main函数,我基本上知道了指针数组的用法了。

「还记不得记得我们在讲二维数组的时候,我说二维数组其实是一个一维数组,不过这个一维数组的元素也是一维数组。在说到为其赋值时,你问我可不可以将数组赋值给二维数组的元素,我说按照正规操作是不行的,但是咱么借助指针数组就可以实现。

在讲指针和数组的用法时,我们已经知道了,指针是可以指向一个一维数组的,那么如果是一个指针数组,自然就可以表示一个二维数组了。

int* p[3];

int a0[]={0, 1, 2, 3, 4};

int a1[]={5, 6, 7, };

int a2[]={9, 10, 11};

p[0]= a0;

p[1]= a1;

p[2]= a2;」

「啥,这些一维数组的长度还可以不一样啊?」

「这是因为指针数组里面真的就只是存放了一维数组的指针地址,而数组的长度对于数组的指针地址没有影响。

但需要注意的是,每个元素指向的是一个真实存在的一维数组,所以在遍历的时候要考虑数组越界的问题。

指针数组咱们就差不多讲完了,接下来就剩最后一点内容,多重指针。今天上午已经讲了这么久了,咱们先休息一下,等到下午咱们争取把结构体和枚举说一下,最后再简单地过一遍文件指针,那么C语言的基础知识咱们就算是学习完了。」

说到此处,老爹徐徐吐出一口气。

从第一天开始学习C语言,到现在已经过去了40多个日日夜夜,这突然要结束了,心里突然有种空出一块的感觉。

吃了午饭后,我和老爹都习惯性躺在床上小眯了一会儿,小弦子就只能睡沙发了。

午休之后,老爹便如约开始讲多重指针。所谓的多重指针,就是指针里面放指针,这一点和多维数组倒是有些相似。指针变量和其他变量一样,都要存放在内存中,既然如此,就会有地址。

如果把指针变量A的地址取出来,赋值给另外一种数据类型声明的变量B,这种数据类型就叫做二重指针。以此类推,如果再把B的地址取出来赋值给另外一种数据类型声明的变量C,那么C的数据类型就叫做三重指针……

以上过程用代码表示:

int a = 0;

int* p =&a;

int** q =&p;

int*** r =&q;

……

在取值的时候:

*r代表的是q

**r 代表的是p

***r 代表的是a

老爹说二重指针除了用来考试或者面试,一般都极少看到。自此,和指针相关的知识就算是讲解完了。

相比其他知识点,指针的内容的确是多了很多。不仅体现在时间上,也体现子在老爹写的教学大纲上。从用时来说,以往的知识点从来都不会超过两个小时,而指针确实足足用了一上午都没有讲完!

从老爹教学大纲的篇幅上来说,指针部分的内容也是其他内容篇幅的两倍多。

「什么是枚举呢?所谓的枚举,就是将一个变量可能的值一一列举出来。比如说一周有七天,如果我们用一个变量的来表示一周中的某一天,那么它的可能值就是星期一到星期日。

同样,用一个变量来表示月份的话,它的可能值就是一月到十二月。

如果我们要表示星期和月份的话,就可以使用枚举。

定义枚举的格式很简单:

enum

{

Sunday = 0,

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

} Week;

你们看,这就定义了一个星期的枚举类型,我们只指定了Sunday的值为0,后面的如果不指定,编译器会自动为其赋值为前一个值加一,所以Monday为1……Saturday为6。

当然了,我们也可以显式为所有字段都指定值,只需要保证每个字段的字不重复就可以了。」