發表文章

目前顯示的是 2014的文章

C pointer to function 函式指標 學習心得

圖片
這是函式指標學習心得的第一篇,在這一篇中你會學習到: 1. 函式在記憶體中的情況 2.  如何宣告一個函式指標 3.  函式的宣告 4. 使用 typedef 來定義一個函式指標的類型 本篇著重在介紹函式指標,實際應用方面會在下一篇介紹 ------------------------ 1.  函式在記憶體中的情況  ------------------------ 在真正的開始學習函式指標 ( pointer to function ) 之前,我們要先弄懂到底什麼是函式 以及函式在記憶體分布的情形。 當一個程式碼檔案 ( .c , .cpp ...) 被執行的時候,會產生出一個程序 ( process ),此時才會開始佔用記憶體及進行各種運算。先前我們定義的指標都是針對一個資料型態,如:int *  這是一個指向 int 資料類型的指標。然而,C為什麼沒有為 function 也定義出一個資料型別? 因為不同的 function 依照建立的方式不同而有不同的 type ,所以沒辦法替每一種 function 都定義出一個通用的型別。 實際上,function 和一般的資料儲存的狀況不太一樣,他儲存的是一堆的指令。 我們可以參考下面的圖片:  圖片來源:http://ccckmit.wikidot.com/cp%3Aenvironment 當一個 process 產生的時候,會有一塊自己可以使用的記憶體,並且這個記憶體分成許多不同的區塊,儲存不同的東西。一般來說,我們使用的區域變數是儲存在 stack 區段。程式碼則是儲存在 .text 區。因此,雖然和一般的資料型式不同,但是程式碼也是會佔用記憶體的! 理所當然,他也會有自己的位址。 我們可以利用反組譯的方式來查看: 編譯方式:gcc -g -o test test.c 在這裡我使用 gdb 來輔助  第 1 行 顯示 function name 的位址,接著我們到第15行可以發現,function 第 1 行指令的位址和function name的位址是一樣的,所以我們可以得知:其實function name的位址就是function第一行指令的位址。接著,在第 8 行中,我們可以看到main呼叫函式也是利用函式第 1 行指令的位址。 由此可知,其

C 語言 指標 學習心得

我個人用指標到現在,覺得指標的用處 : 1 . 修改外部變量 2 . 增加傳遞變數的效率 ( 實際上是copy位址值給 function ) 學習指標的時候要注意: 1.我們要更改的變數他的type是什麼?  2.要更改的變數他的指標的type是什麼? 心中一定要一直反問這兩句話 初學者可以理解成這樣: *****指標變數的內容是儲存位址****** *****一般變數的內容是儲存值value ***** 以下我會使用 scope 的概念來幫助解說 簡單而言, 以 C language 為例子,大括號之間就是一個 scope 在括號之內的東西,到最後一個括號,生命週期就結束了 像是你在  while loop 宣告int變數num  這個 num 出了 } 之後就沒辦法再使用了 所以 function 才會有return value 去取得 function scope 裡面的值 為什麼要用指標才可以在function內改到 caller(call function的地方) 變數的值? 我們可以這樣看 : func 被 call 了時候 其實在 {} 內是這樣做 所以func結束之後n1就不見,無法在取得 所以假如我們不使用指標,而用下列的方法傳遞參數 其實是在func 內實際上先做了這樣的事情 : 可是假如我們改成 傳入變數的位置 (指標變數的內容是 指到的變數 的 位址 ) fun內: 藉由這個方法 我們才可以真正存取到外面的變數 ( 因為知道 複製 外面變數的位址給 num ) ex : 0x12345678 之類 否則只是在自己scope ( 中文叫做作用域 ) 操作 所以才會有指標這種東西。由此可見,指標有一種功能:更改外部變數內容 指標另一個功能是方便傳遞變數 —————————- —————————- —————————-  小結  —————————- —————————- —————————-   利用 func 更改 main 中 int type 的變數  //這裡的int *整個是一個 type

Vim 自動 補完 插件 YouCompleteMe 教學 心得 新手入門 C++ C

圖片
在講正題之前,先奉上developer的github : https://github.com/Valloric/YouCompleteMe 由於自己也是新手,如果內容有什麼不正確的地方請不吝指教 謝謝!  [ 正題開始 ] 這個暑假嘗試了很多vim的plugin 其中一個覺得還不錯的plugin : YouCompleteMe  他和以往的complete補完插件不太一樣的是 他不是去讀ctags裡面的資料 而是parse子串的內容 所以即使再打字串和comment也可以進行補完的功能 ( 有些要利用 vim 的配置檔案 .vimrc 進一步配置 ) 接下來就以ubuntu 14.04進行安裝,這裡介紹的是" 簡易安裝模式 " 再按裝這個plugin之前 我們需要利用的東西:vim  7.3.584 以上, git, Vundle, cmake, python, Vundle linux - like 系統 安裝插件的方式是利用 :            sudo apt-get install [plugin_name] [ 安裝 git ] 首先,在我們擁有一台 linux 作業系統的電腦時,一開始是沒有安裝 " git "  並且在安裝 "Vundle" 之前 要先裝 git  ( 用git裝Vundle , Vundle 是 vim plugin 的託管插件 ) 在$後面打上 sudo apt-get install git 就會開始安裝囉~ 以$開頭代表終端機指令 ( command line ) [ 安裝 Vundle ] 接下來,我們安裝 Vundle :  https://github.com/gmarik/Vundle.vim $ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim 然後我們輸入vim .vimrc 進行bundle的基本配置 在Vundle作者的github有.vimrc的基本配置,其中有一些Plugin可以不用使用 隨個人決定  配置好 .vimrc 後 :wq  [ 安裝

5/24 科技啓蒙

圖片
終於來到了這一天! 在小畢學長、float學長、貝斯學姊、震神等學長姐和同學們長久的規劃下 科技啓蒙——對初學者最友善的科技研討會 終於登場!! 我們的活動場地是在成大電機系館的樊城講堂 科技啓蒙因為沒有贊助商的緣故,所以場地設備等等都是由學長姐爭取而來的 因此經費相當有限,能夠借到這樣的場地已經很不容易了,謝謝。 由於我早上有一些事情要處理,所以只能參加下午的議程。 一進去電機系館就可以看到學長姐再幫忙接待,當然就是先進去報到囉!  確認完名稱之後,我們就可以拿到名牌  然後⋯⋯據說自己的名牌要自己寫是吧XDDD 接著,就可以走進場地找位子坐下來聆聽演講囉。 另我驚訝的是,這一次的講師年紀都很輕,大部分是大一、大二。 還有高二的學生報名擔任講師,並且講授的主題還是四軸飛行器!! 那位學弟的台風也十分穩健,感覺像是上台經驗豐富的樣子,面對台下朋友的問答也是不急不徐。 在這一次活動中,我聽到最有興趣的主題大概是KK(梁潁睿)講的SDL吧! 因為本身也有製作遊戲的經驗,也很喜歡製作遊戲。所以,對製作遊戲的一些繪圖工具 或是遊戲引擎十分感到興趣。 也因為這個演講,讓我感到很excited ! 所以,我評估了一下,就趕緊報名了Lightening Talk Java game engine libGDX 這是我這一次在Lightening Talk講的主題。 因為是在3點才決定要參加閃電秀的活動,所以在投影片方面製作的十分緊急 而且,本身是mac的初學者,剛開始接觸mac不久,所以在講解的過程中可能有些小插曲 在此,要大大的感謝 小畢學長 幫我解圍。 很高興在這一次的閃電秀可以獲得那麼多的笑聲以及掌聲,這讓我這個第一次在演討會中扮演 講師的新手感到很有成就感!真正的感覺到   科技啓蒙真的是對初學者最友善的科技研討會 也讓我體會到將東西分享給大家的喜悅。下一次的科技啓蒙,我希望可以幫忙舉辦!! 希望明年這個時候,大家也可以來一起參與這個盛會

5/14上課心得

圖片
今天的講者是EJ,是成大資訊系畢業的學長。 在這場演講中EJ向我們介紹了Mozilla上面開發APP的新工具 APPmaker! 使用Firefox瀏覽器開啓網頁:https://apps.webmaker.org/ 點選打造APP就可以開始設計自己的專屬APP了 接著我們會進入這個畫面,畫面右手邊是APP應用程式的功能,你可以為你的APP打造這些功能。右手邊的自定化是針對每一個功能加以設定。 我現在設定一個計時器利用按鈕去控制 依序拉出button counter metronome         在這張圖可以看到藍色的線和綠色的線。在Appmaker中,從右手邊出去的線代表的是output的功能(data or 訊號),從左手邊進來的線代表的是input的功能可以接收資料。         但是一開始的線通常不會幫你設定顏色,而是預設成藍色所以你必須做這樣的動作:         將你的游標移動到app功能的左邊或是右邊會出現這樣的小圖示,再進一步進行設定才會該變”線“的顏色。 這個Appmaker還有許多功能可以使用像是照相機,圖片閱覽以及放煙火的小程式。 另外,大家設了這麼多功能之後一定會疑惑,我該怎麼把功能移除?? 該不會只能重新整理吧!? 答案當然是否! 移除小功能的方法是這樣的: 首先我們將滑鼠移動到功能方塊中,接著右上角就會有個”十字“的標記。         接下來只要按著它,往右邊拖曳就會出現一個垃圾桶的符號。把它放到垃圾桶裡面就可以移除小功能了! 雖然,Mozilla的Appmaker 因為有這些小功能,製作APP起來十分方便快速,但是這個Appmaker也不是沒有缺點的! 像是在使用Camera的時候,你會發現:咦!!這個功能怎在右上角怎麼沒有十字的符號?那我們該怎麼移除啊?是的,目前小弟我的確不知道有什麼方法可以移除這個APP功能,只能夠重新整理QQ ,如果有大大知道的話也可以留言給我噢!感謝! 另外,當我想要照相並將照片顯示的時候,我使用image這個功能去接收資料的時候,好像無法將圖片顯示出來。 不知道是不是因為Image Source只能從一個網站接收圖片

popcorn maker & openStreetMap

https://jielite.makes.org/popcorn/21lb

5/17-18 Python Conference , PyCon 新手 心得

圖片
這是我第一次參加大型的研討會 PyCon舉辦的地點在中研院人文社會科學院 而且以往辦的是PyCon TW而今年和PyCon APAC一起合辦所以講者陣容應該比以往強大許多!! 以下是他們的官網 https://tw.pycon.org/2014apac/zh/ 接下來就說說我這一次的經驗吧! <廢言> 由於星期五晚上7點才下課,明天早上8:30就要報到了 所以匆匆忙忙的拿著行囊搭高鐵回到臺北 <搭乘方式> 在官網 https://tw.pycon.org/2014apac/zh/venue/  有許多搭車方式可以到中研院。 不過我建議大家搭乘捷運板南線到“南港展覽館站” 經由 5 號出口出來 然後走到對面的馬路上 攔一台小黃會比較快。 一開始由於官網上寫可以在捷運南港站直接下車轉搭小黃,於是我就先採取這樣的方式。 後來一出捷運在才發覺 南港站其實很偏僻冷清(比起南港展覽館站)要攔車也很難,在PyCon遇到的朋友也這麼說。 可是在南港展覽館站下車外面就車水馬龍,而且5號出口一上去就是研究路一段,距離中研院比較近。(中研院位於: 台北市南港區研究院路 2 段 128 號) 搭乘計程車的費用和官網上,所寫的差不多(80元)並且假如你覺得時間緊急不想要步行 走到人文社科院的話,可以直接請計程車開進中研院裡面,這是可以的! <check in> 進到人文社科院後就可以上二樓報到拉。不過有點奇怪的是報到分類的方式是以“手機後三碼”作為區分。而不是用序號的方式,所以也不太知道序號是做什麼用的XD check in的時候,要出示行前信中的QRcode,假如是購買學生票的話記得要帶學生證。 之後, 工作人會發了一個PyCon的手提袋給我們裡面有 gitHub貼紙、HDE貼紙、一件衣服(made in Taiwan)還有一些贊助商的廣告紙以及你的個人名牌,PyCon手冊   p.s第二天不用check in直接進R0國際會議廳等開場(第一場)就好了 對了!假如你當天沒有吃早餐的話他們是有準備餐盒的噢! <聽演講> 接著就開始聽演講囉! 這個是會場的配置圖,同一個時段會有三個~四個場地(包含廠商show time等等)進行演講 。所

第一堂課心得

圖片
這是我第一次接觸自由社群 第一次聽到Gnome和openSUSE 聽MAX和我們分享自由社群的經驗,不像是一般的團體有許多限制 只要你有心想要參加 就可以加入他們,想要離開就離開。這是一種很Free的概念。 而且參加自由社群的好處是可以認識不同年齡層,不同產業界,不同國籍文化的人 可以拓展自己的人脈以及視野,以這一點來說,非常吸引我。而且有很多自由社群是“免費”的。我想這是最吸引人的地方! 在這堂課中MAX提及了一種參加自由社群的方式就是:OpenHatch 我們google一下 OpenHatch就可以看到他的網頁 看他的介紹說 這是一個參加社群的工具(Community tools),接下來我們點進右上角的log in/sign up 看看吧! 可以看到它整合了很多登入的方式 有google Yahoo 等等,非常方便! 在此我以Google的方式登入 接受權限後我們可以看到下面這個畫面 中間那一欄可以輸入使用者名稱 輸入進去後就可以登入拉! 點進去我們的名字 看看有什麼功能 我們可以看看大家放了哪些project在這裏 也可以貢獻自己的project以及將你project的bug放上去和大家分享 可以請大家幫忙 點選最上面的工具列people我們可以搜尋朋友的名字 透過這個功能我們就可以看看OpenHatch上的朋友貢獻了什麼東西 點選最上面的工具列project可以看到這個圖片 分類的方式是以程式語言來分類方便大家搜尋 大家之後可以在玩玩看 -----------------------------------------OpenHatch---------------------介紹至此-------------------------------- 接下來是請到G0V社群的成員和我們介紹 我們常常在抱怨社會的制度或是政府令人不滿意,或是手邊用的App有夠難用 但是在抱怨後,沒有辦法能夠”動手“去執行、改善現況。於是,G0V出現了! 這是一個自由社群 主張自己提出project大家參與project來改善這個社會 我們先到g0v網站看看介紹吧 About 可以瀏覽關於g0v的事情 Proje