指標結構體函式-其實可以這樣詳細理解
今天一大早登了下QQ空間,看到本科的一個學弟發表一篇日誌,寫關於西電微軟俱樂部面試題的解答,寫的很不
錯。我也一下子起興了,因為我曾經也是被指標困惑很久,搞不清頭緒,本科到研究生,我也筆試面試不下二十次
了。每次面試的時候問到指標或者引用這個問題我總是答不完美,灰溜溜的感覺(我一個堂堂985的碩士研究生啊,這
種問題都答不出來感覺很丟臉的,我的感受是這樣子的!)。。。趁這個時候再重新複習下指標,順便還有結構體,函
數。雖然我講的不是面面俱到,但是你看了絕對會受益!挺有趣的,不信你往下看。。。
首先,我想說的是這個面試題,實在沒必要這樣子出。
好了,咱們開始吧!
原題如下:
在這裡我不按照順序,儘量讓大家理解。這個並不恐怖,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,相應結果如下,就是說,這個是
人家偉大的微軟公司一驚做好了的,你就看著就可以了:
標題,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,那就還是乖乖地去學習!),不要指望別人會手把手的去教會你什麼,好好珍惜大學四年學習的時光吧。
相關推薦
指標結構體函式-其實可以這樣詳細理解
今天一大早登了下QQ空間,看到本科的一個學弟發表一篇日誌,寫關於西電微軟俱樂部面試題的解答,寫的很不 錯。我也一下子起興了,因為我曾經也是被指標困惑很久,搞不清頭緒,本科到研究生,我也筆試面試不下二十
淺析結構體函式指標與核心裝置驅動
最近在公司沒什麼事做,突然有來寫寫日誌和部落格,這種突發的靈感來自於我在學習核心驅動程式碼的時候發現了結構體的一種古老的初始化方法,多虧了尚觀廣州校區的葉老師在群裡用心的給我文字講解,讓我明白了原來結構體初始化也可以用:冒號這樣的方法。 其實在C語言中
結構體初始化及結構體指標.結構體陣列.結構體函式的呼叫賦值等
#include "stdio.h" #include "stdlib.h" #include "string.h" int fun(void); /************************************* int ARRSCORE[3]={133,123
static 指標 結構體使用
static 指標 結構體使用 static使用注意事項 static --> //修飾區域性變數:將變數的生命週期變為和整個程式相同 但是不改變作用域 //修飾全域性變數:將改變作用域為當前檔案 //修飾一個函式:修改了函式的作用域為當前檔案 指標定義
結構體函式作用及示例
一、作用 1. 提高程式碼閱讀性 2. 分類管理函式及部分屬性 3. 偏向於c++的面向物件思維 二、使用方法: 1. 宣告結構體函式  
指向結構體的指標&結構體成員指標
1、指向結構體的指標 一個 變數的指標,就是該變數所佔據的記憶體段的起始地址。指向一個結構體的指標變數,其值是結構體變數的起始地址。 /* *copyright(c) 2018,HH *All rights reserved. *作 者:HH *完成日期:2018年8月1
c++佇列指標 結構體指標
#include<iostream>#include<queue>#include<map>#include<string>#include<mut
【C/C++開發】函式使用結構體、結構體指標作為返回值分析
函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時的引數壓棧。子程式不負責對要返回的結構體分
關於如何理解連結串列結構體指標引用LinkNode * &L的問題
初學資料結構,在學習的過程中有了這個疑問,已經理解其中緣由,特寫篇部落格和大家一起分享交流。 C++中的引用:& int a=10; int &ra=a; 注意:此處&是識別符號,不是取地址符! a是目標原名稱,ra是引用名,由引用的作用“引用就是某
C/C++ 指標小結——指標與其它資料型別(陣列、字串、函式、結構體)的關係
一、指標與陣列和字串 1、指標與陣列 當宣告數時,編譯器在連續的記憶體空間分配基本地址和足夠的儲存空間,以容納陣列的所有元素。基本地址是陣列第一個元素(索引為0)的儲存位置。編譯器還把陣列名定義為指向第一個元素的常量指標。 元素的地址是通過索引和資料型別的比例因子來計算的;例如: x[3
結構體中使用函式指標
struct kobj _ type { void (*release)(struct kobject *); struct sysfs _ ops * sysfs _ ops; struct attribute ** default _
關於sizeof函式、memcpy函式以及結構體關於指標的問題彙總
1、sizeof()函式用於獲取變數、型別等位元組數。但是不能通過結構體指標獲取結構體的位元組數。使用會出現錯誤; 比如: typede struct { unsigned char yuliu[5]; unsigned char port; }_stru
結構體的指標和C語言函式傳參
資料結構的基礎,是函式的傳遞和結構體的應用。 首先從函式傳參做起筆記,c語言函式傳參的本質都是傳值。我的大學教材上舉例為傳值和傳地址; 我借用百度上的一些回答作為引用: (1)傳值,就是把你的變
用結構體指標做函式形參實現返回多個值(fishing_6)
最近在學ST32驅動數字攝像頭OV2640的實驗,無意中遇到了函式返回多個值的情況,決定Mark一下,說不定以後就會用到,因為一般函式都是隻有一個返回值的嘛,具體如下: 首先在標頭檔案定義結構體: typed
【C++】子函式返回結構體的程式碼 及 字串常量傳入子函式的指標實現
說明: 1. 下面的子函式 getStu 裡,傳入了三個引數: 字串指標 char * name 整型變數 int k_year; char * k_sex; 2. 當把字串作為引數傳遞給子函式時,主程式中可以使用字串常量,但子函式的形參只能使用字元型指標 char
當函式使用結構體指標變數作為引數時,如果結構體中嵌套了結構體,應該如何呼叫其中的元素?
今天寫程式碼時突然遇到了這個問題,以前不曾探討過多層巢狀結構體指標變數的訪問,只知道結構體指標變數要訪問其元素時應該用 -> 來訪問,但對於結構體中巢狀有結構體的時候呢? 請看下面程式碼: #include “stdio.h” using namespac
結構體裡面的函式指標怎麼初始化
/** * 為結構體中的指標陣列賦值 */ #include <stdio.h> typedef struct test { void (*p)(void); void (*q)(void); void (*y)(void); }test; vo
結構體指標作函式引數(C# 呼叫C++ 的DLL)
1、C++結構體定義: #pragma pack(1) struct Person { #define Count_favoriteNumbers 6 int id; fl
結構體中函式指標初始化
/** * 為結構體中的指標陣列賦值 */ #include <stdio.h> typedef struct test { void (*p)(void); void (*q)(void); void (*y)(void); }t
C++類 給結構體成員 函式指標 賦值
myStruct標頭檔案 myStruct.h class CMyClass; struct { int nFlag; void (CMyClass::*myinit)(int n); void (CMyClass::*myopen)(int n,void* arg)