今天一大早登了下QQ空間,看到本科的一個學弟發表一篇日志。寫關于西電微軟俱樂部面試題的解答,寫的非常不
錯。
我也一下子起興了,由于我以前也是被指針困惑非常久。搞不清頭緒,本科到研究生。我也筆試面試不下二十次
了。每次面試的時候問到指針或者引用這個問題我總是答不完美。灰溜溜的感覺(我一個堂堂985的碩士研究生啊。這
種問題都答不出來感覺非常丟臉的。我的感受是這樣子的!)。。
。趁這個時候再又一次復習下指針,順便還有結構體。函
數。
盡管我講的不是面面俱到。可是你看了絕對會受益!挺有趣的,不信你往下看。。。
首先,我想說的是這個面試題,實在不是必需這樣子出。
好了,咱們開始吧!
原題例如以下:
在這里我不依照順序,盡量讓大家理解。
這個并不恐怖,c、c++語言沒什么難的。進不進俱樂部、協會事實上意義真的
不大,重點在于自學,在于你在大學干了什么。回歸正題。
我僅僅講3個東西。從難往簡單了講,3步你就懂
了。。!
!。
?
字 面意思最主要的英語,時間,你的時間。寶貴的時間。然后一個網址,前面是%d,它代表這個結果是一個十進制
整數的意思,后面有一個xdmstc.com就 是西電微軟俱樂部的意思。
而print是“輸出”的意思,也就是說。輸出的內容就
是答案。后面的一堆代表著那%d,如今請你 先不要管他。這樣一來,答案就變成了:
?
“ ‘一個十進制數’.xdmstc.com”,也就是說。它是一個網址。
?
簡單說一下那個&和*是什么意思---------第一步開始。
?
我告訴你一個饅頭在一個鍋里,你就知道哪里能夠填飽肚子了對不正確?。你沿著我手指的方向去找那個鍋里的那個饅
頭。你就攻克了溫飽問題------這里我的手相當于一個羅盤,一個指南針。告訴你饅頭的位置在哪里!
?
你猜對了!
這就是我要說的。那個指向鍋的手,叫做“指針”。你如今沒吃飽已經餓暈了對不正確!所以你眼冒金星,所
以這里的符號就用一個星來“*”表示,總結出來就是:
?
“ 一個人的手 * 指向鍋的手 ”
?
這里面“一個人的手”是一個限定對吧?它不是一僅僅貓的,也不是一僅僅老鼠的。是一個人的,也就是指定了類型;后面
的“指向鍋的手”,告訴了大家那個地方能夠找到吃的!
總結起來就是:
?
“類型名 * 指針名”,我們給“*”起個名字,叫做“指針運算符”!
關于類型名什么意思,在后面我解釋!
。
?
而 那個鍋。就是有饅頭的“地址”,我們手機指南針校準時候都是繞“8”字形,所以我們用“ & ”符號,與饅頭合起來也就
是饅頭的地址啦。我們要取饅頭吃的--------所以這里我們管“&”叫做取地址運算符^_^。也就是 說,“&饅頭”就叫做饅頭
的地址。而饅頭,有可能是白饅頭。黑饅頭。花饅頭,是可變的。所以名字就叫作“變量名”。而&后面也就僅僅能跟著
變量名,總結起來就是:
?
“饅頭的地址 =&饅頭”
?
你顯然已經意識到。手不能吃(當然你沒事舔你的爪爪能充饑也好!),手指著的那個東西才干吃 !
所以運算符和指
針名合在一起才干代表那個饅頭!
!
!
?
就是說,那個地方里面的東西:“*指針名 = 饅頭”
?
所以,上面的類型名呢?不難理解。它就是代表著指針所指變量的類型!
嘿嘿嘿。
?
鍋呢?鍋也不能吃!(你鐵齒鋼牙除外。。
)鍋里的東西才干吃!它的意義是什么?他的意義是空間,代表著那個存
放變量的空間---------在那遙遠的地方。有一個存儲東西的鍋,它存著一個饅頭,一個引路者。用手指向那個饅頭,一
個孩子雙眼冒金星去拿走里面的饅頭。
。
。
。
?
所以。
?
要吃的東西 = 饅頭
?
*指針名 = 要吃的東西
?
*(&要吃的東西)= 饅頭
?
如今懂了吧?舉個真正的樣例:有變量a,那么&a就代表變量a的地址,p為指向位置(這里我們起一個專業名詞。叫
做存儲單元,),*p即為指針p所指的存儲單元的內容。
?
難嗎?指針是什么,該死的符號是什么。地址是什么。大量的基礎的應用。確實指針是個非常強大的內容。可是這些是
最主要的,我們寫project的時候經常常使用得到這些最主要的。而我講完了!
難嗎?第一步。最難的一部分。ok了!
?
繼續同學們。struct英文就是“結構”的意思。這個都懂吧?!不懂沒關系。查字典就懂了!另外說一下,我這篇文章僅僅
能保證沒接觸代碼的學生能看懂,可是不能面面俱到,也不能深入。所以批評文章請走人,假設有寫錯的歡迎指正!
?
你 的班級有好多人。構成了一個集體,大家各有分工。班長、團支書、副班長、副團支書、班長的秘書、副班長的秘
書。。。。。哈哈。總之結構嚴謹,各有屬性,構成了班級體-----------所以,簡稱“結構體”。用struct表示,你班的同
學們呢?!就叫做結構體的成員,班級把你們包裹住!就是說用大括號把你們這幫孩子封鎖到教室里給我好好上課!
而成員又有什么亂七八糟的職責呢?我說一下你就懂啦。
?
struct 班級a(比方我的班級體是021131班,那么這就是你的結構體的名字!)
?
{
?
班長 張三;
?
團支書 李四;
?
};
?
那些所謂的職務,就是結構體成員變量的類型,這就是一個結構體。
?
大家一定非常害怕高中那段日子:“張三,尼瑪的出來!
讓你在教室說話!。!
”對!老師指著你讓你出來,或者其它人
來班級找你指定你出來,班級那么多人怎么辦?叫你的名字唄。哈哈。
?
所 以,一種簡便的取出結構體的成員的運算符誕生了--------"-> ",對,沒錯就是個箭頭。你是不是在想。這個跟剛才的
指針好像啊!
找一個人不一定非要用手指著呀!可是,你也意識到了,思想是一樣的,我找出那個人。把他叫出來,
任務完畢!
!
總結起來就是。用指針訪問結構體的一個成員的方式:
?
指針名 -> 成員名
?
第二步ok。
?
好了!最后一個概念-----函數。
?
這個我都能夠不講了!你絕對能理解。
?
已知y = f(x),那么y就叫做x的函數。
?
對。就這樣,其它限制條件我不寫了,可是。事實上中心思想就這樣。
?
這里面,就是:
?
函數名字(里面的亂七八糟的東西)
?
ok!如今上面的程序依照原理來說,你能攻克了。
?
我知道你想問什么,那個tm_year什么鳥?!
?
就是這樣,今年。錯了,是3年里 ,我遇到的全部的新生,都沒有一個,沒有一個是我的那位傳說的學長的后塵。
?
“西電和成電哪個好”。“西電##專業怎么樣”,“軍訓累不累”,“大一讓帶電腦么”,“西電(#專業)排名多少”,“食堂好
吃么”。“宿舍條件怎么樣,熱水亂七八糟的 ”。“去市區是916么”,“開學的考試怎么回事”。。。無聊且無意義的問
題。
?
我想說的是,這樣的問題你不認為無聊嗎?。
你會說:“人家大一的,就這點問題被!能怎么樣?”
?
凡是問這樣問題的 ,最后沒有一個成為真正的牛人。凡是說大一的問這些問題不為過的人 。水平也不怎么樣。
?
為什么?
?
答案,憑什么 。這是大學教你的第一堂課:大學靠的是自學,這些問題你網上都能查到!
都有答案!為什么還問?不
知者不為過,好吧!
你自己安慰你自己吧!
我在這里明白告訴你:你大學第一堂課的成績就是不及格!
?
你指望老師教你?手把手問你會不會?!
這是大學。假設 你還在跟我爭論這個問題。僅僅能說句,你好。菜鳥!
?
該告訴你的我都告訴你了。這個程序你還看不懂!
!
你能夠去死了。谷歌struct tm,對應結果例如以下,就是說。這個是
人家偉大的微軟公司一驚做好了的,你就看著就能夠了:
?
標題,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,那就還是乖乖地去學習!
),不要指望別人會手把手的去教會你什么,好好珍惜大學四年學習的時光吧。