指针结构体函数-其实可以这样详细理解

今天一大早登了下QQ空间,看到本科的一个学弟发表一篇日志,写关于西电微软俱乐部面试题的解答,写的很不

错。我也一下子起兴了,因为我曾经也是被指针困惑很久,搞不清头绪,本科到研究生,我也笔试面试不下二十次

了。每次面试的时候问到指针或者引用这个问题我总是答不完美,灰溜溜的感觉(我一个堂堂985的硕士研究生啊,这

种问题都答不出来感觉很丢脸的,我的感受是这样子的!)。。。趁这个时候再重新复习下指针,顺便还有结构体,函

数。虽然我讲的不是面面俱到,但是你看了绝对会受益!挺有趣的,不信你往下看。。。


首先,我想说的是这个面试题,实在没必要这样子出。


好了,咱们开始吧!

原题如下:

指针结构体函数-其实可以这样详细理解_第1张图片


在这里我不按照顺序,尽量让大家理解。这个并不恐怖,c、c++语言没什么难的,进不进俱乐部、协会其实意义真的

不大,重点在于自学,在于你在大学干了什么。回归正题。我只讲3个东西,从难往简单了讲,3步你就懂

了!!!!!

 

字 面意思最基本的英语,时间,你的时间,宝贵的时间。然后一个网址,前面是%d,它代表这个结果是一个十进制

整数的意思,后面有一个xdmstc.com就 是西电微软俱乐部的意思。而print是“输出”的意思,也就是说,输出的内容就

是答案。后面的一堆代表着那%d,现在请你 先不要管他。这样一来,答案就变成了:

 

“ ‘一个十进制数’.xdmstc.com”,也就是说,它是一个网址。

 

简单说一下那个&和*是什么意思---------第一步开始!

 

我告诉你一个馒头在一个锅里,你就知道哪里可以填饱肚子了对不对?!你沿着我手指的方向去找那个锅里的那个馒

头,你就解决了温饱问题------这里我的手相当于一个罗盘,一个指南针,告诉你馒头的位置在哪里!

 

你猜对了!这就是我要说的,那个指向锅的手,叫做“指针”,你现在没吃饱已经饿晕了对不对!所以你眼冒金星,所

以这里的符号就用一个星来“*”表示,总结出来就是:

 

“ 一个人的手 * 指向锅的手 ”

 

这里面“一个人的手”是一个限定对吧?它不是一只猫的,也不是一只老鼠的,是一个人的,也就是指定了类型;后面

的“指向锅的手”,告诉了大家那个地方可以找到吃的!总结起来就是:

 

“类型名 * 指针名”,我们给“*”起个名字,叫做“指针运算符”!关于类型名什么意思,在后面我解释!!

 

而 那个锅,就是有馒头的“地址”,我们手机指南针校准时候都是绕“8”字形,所以我们用“ & ”符号,与馒头合起来也就

是馒头的地址啦!我们要取馒头吃的--------所以这里我们管“&”叫做取地址运算符^_^,也就是 说,“&馒头”就叫做馒头

的地址。而馒头,有可能是白馒头,黑馒头,花馒头,是可变的,所以名字就叫作“变量名”,而&后面也就只能跟着

变量名,总结起来就是:

 

“馒头的地址 =&馒头”

 

你显然已经意识到,手不能吃(当然你没事舔你的爪爪能充饥也好!),手指着的那个东西才能吃 !所以运算符和指

针名合在一起才能代表那个馒头!!!

 

就是说,那个地方里面的东西:“*指针名 = 馒头”

 

所以,上面的类型名呢?不难理解,它就是代表着指针所指变量的类型!嘿嘿嘿!

 

锅呢?锅也不能吃!(你铁齿钢牙除外。。)锅里的东西才能吃!它的意义是什么?他的意义是空间,代表着那个存

放变量的空间---------在那遥远的地方,有一个存储东西的锅,它存着一个馒头,一个引路者,用手指向那个馒头,一

个孩子双眼冒金星去拿走里面的馒头。。。。

 

所以,

 

要吃的东西 = 馒头

 

*指针名 = 要吃的东西

 

*(&要吃的东西)= 馒头

 

现在懂了吧?举个真正的例子:有变量a,那么&a就代表变量a的地址,p为指向位置(这里我们起一个专业名词,叫

做存储单元,),*p即为指针p所指的存储单元的内容。

 

难吗?指针是什么,该死的符号是什么,地址是什么,大量的基础的应用,确实指针是个很强大的内容,但是这些是

最基本的,我们写工程的时候常常用得到这些最基本的,而我讲完了!难吗?第一步,最难的一部分,ok了!

 

继续同学们,struct英文就是“结构”的意思!这个都懂吧?!不懂没关系,查字典就懂了!另外说一下,我这篇文章只

能保证没接触代码的学生能看懂,但是不能面面俱到,也不能深入,所以批评文章请走人,如果有写错的欢迎指正!

 

你 的班级有好多人,构成了一个集体,大家各有分工,班长、团支书、副班长、副团支书、班长的秘书、副班长的秘

书。。。。。哈哈!总之结构严谨,各有属性,构成了班级体-----------所以,简称“结构体”,用struct表示,你班的同

学们呢?!就叫做结构体的成员,班级把你们包裹住!就是说用大括号把你们这帮孩子封锁到教室里给我好好上课!

而成员又有什么乱七八糟的职责呢?我说一下你就懂啦!

 

struct 班级a(比如我的班级体是021131班,那么这就是你的结构体的名字!)

 

{

 

班长 张三;

 

团支书 李四;

 

};

 

那些所谓的职务,就是结构体成员变量的类型,这就是一个结构体。

 

大家一定很害怕高中那段日子:“张三,尼玛的出来!让你在教室说话!!!”对!老师指着你让你出来,或者其他人

来班级找你指定你出来,班级那么多人怎么办?叫你的名字呗!哈哈!

 

所 以,一种简便的取出结构体的成员的运算符诞生了--------"-> ",对,没错就是个箭头!你是不是在想,这个跟刚才的

指针好像啊!找一个人不一定非要用手指着呀!但是,你也意识到了,思想是一样的,我找出那个人,把他叫出来,

任务完成!!总结起来就是,用指针访问结构体的一个成员的方式:

 

指针名 -> 成员名

 

第二步ok。

 

好了!最后一个概念-----函数。

 

这个我都可以不讲了!你绝对能理解。

 

已知y = f(x),那么y就叫做x的函数。

 

对,就这样,其他限制条件我不写了,但是,其实中心思想就这样。

 

这里面,就是:

 

函数名字(里面的乱七八糟的东西)

 

ok!现在上面的程序按照原理来说,你能解决了。

 

我知道你想问什么,那个tm_year什么鸟?!

 

就是这样,今年,错了,是3年里 ,我遇到的所有的新生,都没有一个,没有一个是我的那位传说的学长的后尘。

 

“西电和成电哪个好”,“西电##专业怎么样”,“军训累不累”,“大一让带电脑么”,“西电(#专业)排名多少”,“食堂好

吃么”。“宿舍条件怎么样,热水乱七八糟的 ”,“去市区是916么”,“开学的考试怎么回事”。。。无聊且无意义的问

题。

 

我想说的是,这种问题你不觉得无聊吗?!


你会说:“人家大一的,就这点问题被!能怎么样?”

 

凡是问这样问题的 ,最后没有一个成为真正的牛人。凡是说大一的问这些问题不为过的人 ,水平也不怎么样。

 

为什么?

 

答案,凭什么 。这是大学教你的第一堂课:大学靠的是自学,这些问题你网上都能查到!都有答案!为什么还问?不

知者不为过,好吧!你自己安慰你自己吧!我在这里明确告诉你:你大学第一堂课的成绩就是不及格!

 

你指望老师教你?手把手问你会不会?!这是大学。如果 你还在跟我争论这个问题,只能说句,你好,菜鸟!

 

该告诉你的我都告诉你了,这个程序你还看不懂!!你可以去死了。谷歌struct tm,相应结果如下,就是说,这个是

人家伟大的微软公司一惊做好了的,你就看着就可以了:


 指针结构体函数-其实可以这样详细理解_第2张图片



标题,mumber,type,meaning,你哪个看不懂?

 

就是说,对应的年份,减去1900,我已经告诉你了!就是tm_year -1900以后的数

 

现在分析那个程序,一句一句来!

 

第一句,你就知道有这么个定义,接着有这么个东西precious_time就行了。

 

第二句,结构体后面有个东西,是your_time,他是个啥啊?看上面的谷歌截图,请与后面的东西关联一下加深一下理

解。第三句,一个函数,括号里面的你们肯定懂,time微软写好的,字面意思,结果是系统时间!

 

第四句,又是一个函数!而且除了函数名不一样,括号里面的东西与第三句完全一样!此函数获得的tm结构体的日历

时间,也是微软写好的。

 

第五句,对应的年份 - 1900,然后再加上1900,今年是2014,最后输出答案:2014.xdmstc.com。

 

就是说,有那么一个变量,叫做precious_time,有那么一个指针叫做your_time,电脑右下标的时间,今年是2014年。

 

我最近在弄论文,很恶心。我写这个不为别的,算是期间的小小休息,也是个人看不惯仗着代码来欺负新生的措施。

 

在这里顺便告诉一下,真正的东西,使用心血换来的。其实,真的能用代码解决的问题,都不是问题。


最后,我强调一下,也算是给刚进入大学的大一新生们一个忠告:学习这个东西靠的是自觉、自学,不要找理由这借口更不要不要骗自己了,懂就不用说,不懂不能装懂,一定要去搞清楚,基础很重要,不然后面会很麻烦(当然,你以后不从事相关行业另当别论,只要你不是官二、富二XXX,那就还是乖乖地去学习!),不要指望别人会手把手的去教会你什么,好好珍惜大学四年学习的时光吧。



你可能感兴趣的:(C/C++,笔试,面试)