登陆注册
77391200000054

第54章 尾声(一)

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

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

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

int* p[3];

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

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

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。

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

「可是老爹,这样做有什么意义么?我们完全可以直接用数字0到6来表示一周啊。」

「的确是这样,但是你考虑到这个问题没有,不同的人定义的习惯可能不一样。比如说我们中国人数数习惯从1开始,那么有可能用1到7来分别表示星期一到星期天。

但是在程序的世界里,一切都是从0开始的,那么也有很多人像我刚才一样,使用0到6分别表示星期天到星期六。

如果时间太久了,我们可能就会忘记到底是使用哪种方式来表示的了,况且数字在使用的时候可读性也比较差。

但若是使用枚举,这些问题都迎刃而解了。我们要使用星期几,只需要使用它的英文名称就好了。不仅不会混乱,而且见名知意。」

「那也不一定非得使用这啊,我们还是可以定义常量,使用起来也比较方便啊。」

我很是不服气地说道。

「是的,其实在枚举刚出来的时候,很多人也跟你一样,毕竟习惯了使用定义常量的方式,但是后来就慢慢地接受了这种方式。

你非得要使用常量来定义,也没错,但是有些不合群。

这就好比大夏天其他人都穿着T恤,而你却穿着大红色羽绒服到处跑,别人也不能把你怎么样,毕竟不违法乱纪,也没有影响别人。所以自然不会有人把你拦住,非要你把羽绒服脱下来。

其他人只会在背后悄悄议论,说你怎样怎样。

写程序也是一样的,毕竟真正开发的时候代码不会只交给一个人来写或者维护。所以在写代码的时候就需要注意一些,不能太特立独行,最好还是采用大家都能够接受的风格。

呐,定义了枚举,我们就需要使用它。

枚举和其他数据类型一样,可以定义变量,只不过变量的值只能是定义的字段。例如:

enum week w = Friday;

或者定义在函数的形式参数上:

String weekToString(enum Week weekday)

{

switch (weekday)

{

case Sunday:

return “星期天“;

case Monday:

return “星期一“;

case Tuesday:

return “星期二“;

case Wednesday:

return “星期三“;

case Thursday:

return “星期四“;

case Friday:

return “星期五“;

case Saturday:

return “星期六“;

default:

return “错误“;

}

}

通过这两个例子可以看出,我们在声明一个枚举变量的时候,还需要加上一个enum关键字,看上去有些多余。

要解决这个问题,还是需要请typedef它老人家出马。如果在定义枚举的时候加上typedef,声明枚举变量的时候就不需要再使用enum关键字了:

typedef enum

{

Sunday = 0,

……

} Week;

声明变量:

week w = Friday;

String weekToString(Week weekday);」

同类推荐
  • 由煎饼引发的种种

    由煎饼引发的种种

    “KeepCalmandNotLetMomCookPancakes”尽管手上满是颜料,我还是不断地在油布上拍打着,凌乱的手印逐渐组成一句鸡汤,眼睛困倦了,视线模糊了……我强打起精神,写下最后一个字母“s”,完美地画好向上弯曲的弧,闷呼出一口气,闭上眼睛。是的,这是一件由煎饼引起的连锁反应,像连锁一样环环相扣,似乎走错一步,我就会跌下悬崖,永世不得翻身。所谓的高空走高丝,也许就是如此。
  • 野兽跑到世界的尽头

    野兽跑到世界的尽头

    愿你的生活往后尽是美好,路过的甲乙丙丁都会成为伴侣。
  • 电虎鼠威

    电虎鼠威

    一群当代农村特殊职业的青年的幽默又伤感的现实生活故事。
  • 那些遗憾终将散去

    那些遗憾终将散去

    人的一生到底有多长谁也没有人可以预知,我也从未想过自己即将离开人世,一切都是命运的安排,一切又仿佛是一场梦,这是一场灵魂的救赎,还是我心有不甘的挣扎……
  • 吴楠

    吴楠

    是什么让一长相精致女婴被禽兽奶奶实名嫌弃险些丧命?是什么让以为豆蔻少女走上不归路?是什么成为了她的救命稻草?又是什么让她孤独终老?究竟是道德的沦丧还是人性的扭曲?
热门推荐
  • 天缘劫变

    天缘劫变

    天缘界的顶尖天才之一,超级势力的首席弟子陈辰,看似身份显赫,但在这层光鲜的外表下,却隐藏着不为人知的秘密,忍受着血海深仇的折磨。且看少年在这错综复杂的势力纷争中默默成长,在这即将变天的乱世中手刃仇敌,在缘分因果中谱写出可歌可泣的儿女情长,在末世之下终窥得天道真相,登临大陆之巅!我的降生,注定了带来的不是自己的人生,而是终结那些人的人生!只是我也有我的坚持,就是守护她一辈子……我要的其实只是一个骗小孩那样的故事人生……
  • 机器公敌

    机器公敌

    “女神,我可以追你吗?”“听说你那个机器人怀了你的孩子?”“还没呢…我还没找到将她进化成人的方法呢!”“这么说如果进化成人你就会让她怀你的孩子?哼……再见!”“那个……不是,女神……女神……我告非!……骨头妹……出来,变化成女神的模样,让我研究研究!”
  • 敢死连

    敢死连

    一部中国版“火线”!“炮灰连”绝境逢生,“英雄连”气吞山河,一群铮铮铁骨的纯爷们儿上演英雄虎胆。这是一群平凡士兵的传奇故事。他们是一支炮灰连、浴血保安队、搏杀皇协军、栖身国民军,处处绝境逢生,逝去了生命的脆弱,换取了尊严的生存。
  • 焚星战纪

    焚星战纪

    金、木、水、火、土。五行属性。修魂、修星、修魔、修妖。神奇穿越。导致一位无法修炼五行属性的少年,踏上了永无止尽的复仇之路、
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 人生路上好多坑

    人生路上好多坑

    柳梦婷是一个普通家庭的孩子,努力的学业毕业后,在社会上受到处处的压迫,最终奋起反抗,在人生路上慢慢的铺平前方的路。
  • 忽界防骗指南

    忽界防骗指南

    一个从精神病院跑出来的悲伤故事,看王齐天如何与天齐,别人笑我太疯癫,我笑他人是傻X,论天下忽界可曾遇敌手,答曰不曾。嘿嘿
  • 末世之审判血神

    末世之审判血神

    弱肉强食,便是这残酷的世界的生存法则。想在这样的世界生活下来,你唯一能做的,便是把自己变强。在这个世界中,你几乎没有任何人能依靠,不要想着把自己的后背交托给别人。否则,得到的,可能只会是背叛和毁灭。末世已至,丧尸遍野,绝望求生…… 第一本书《暄与狼》发步在起点中文网,现已停更。
  • 你满意你的工资吗

    你满意你的工资吗

    为什么我面试老是被拒绝呢?为什么领导总对我不满意?为什么我的绩效达不了标?为什么我辛苦加班却没有加班费?为什么我得病却报不了医药费?为什么无缘无故要辞退我?……面对千变万化的职场,面对职业生涯中可能出现的种种问题,你该怎么办?别着急,让资深人力资源专家来为你解疑答惑,活用制度、妙用方法,保护自己、驰骋职场!
  • 豪门夜爱:股王的百万妻

    豪门夜爱:股王的百万妻

    一百万美金,她将自己摆到了赌桌上,不曾想,人财两失,未婚夫没了,积蓄没了,还守着那最后的防线做什么,一百万美金,她不亏了……一夜之后,她灰溜溜的跑了,却没想到竟然中奖了,那一夜晚,在黑暗中,她连那个男人的脸都不曾看到,却带了奖品回来,这下要怎么办?拿掉还是留下?十月怀胎,当生下的小子有一头金发,一双蓝眼时,关欣心里有很多的遗憾,那一晚,她应该看看那个男人的脸,难道这辈子只能带着那遗憾吗?