2014-01-20 06:39

感謝朋友P熱情贊助花費他下班之後空檔時間教我C語言。
這一系列學習筆記會是走超個人路線,就是那種上課完把自己有吸收聽懂的吐出來整理的筆記,觀念還有想法有任何錯誤歡迎更正。
朋友P也就是波卡他教我C語言的出發點很單純,他希望我能夠有關於演算法還有一些程式人應有的基礎觀念。
而我這個半路出家還瘋狂偏掉的學生也只好哭著把從小學四年級就放棄的數學撿回來XD

在C語言課程開始之前,我腦袋裡頭有:
- 直譯式語言PHP
- 高職計算機概論(不過快忘光光了)
- 爛到爆炸的數學(高中學測數學勾到底標,為什麼會這樣呢?大概就是因為從小爛到大吧……)

在課程過程我感受到什麼叫做好想死的感覺XDDD


先看 Hello World

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

C語言是編譯式語言,寫好了的程式必須經過編譯器編譯過後才可以執行。
首先進編譯器之後,編譯器會先處理#開頭的部份。

在PHP當中你要輸出資料不管是單引號雙引號包起來都沒有差別,但C語言並不是
「"#“」是字串(嚴格說起來C語言沒有字串,只有字元陣列)
「'#‘」是字元
因為是C語言,所以針對資料型態要非常注意,弄錯長度算錯記憶體需求,搞到溢位就自己撞牆吧!

1
2
#include <stdio.h>
#include <stdlib.h>

編譯器處理此段時候載入標準函式庫,除了C語言本身的標準函式庫之外,你也可以定義一些表頭檔案去 include
沒有 include stdio.h ,你就沒有 input output 的 function 可以用
沒有 include stdlib.h ,你很多基本常用的 function 也統統沒得用


註解

PHP 的註解有單行多行之分,單行可用「//」或是「#」註解掉,多行則是「//」
C 語言的註解有
- 「/
/」
- 「//」(C99 出來的,ANSI C 會出錯)


接下來我要說一下波卡真的不是按照一般上課方式,他他他開始講起資料型態還有指標了,另外他快速拿出一篇網路上頭轉到翻掉的一篇文章邊看邊解說
[C語言測試] 想成為嵌入式程式員應知道的0x10個基本問題

1
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

define 多行時候結尾需用反斜線串起來
括號很重要括號不嫌多
UL: Unsigned Long Integer

1
2
3
4
for(;;)
{
   ...
}

我要說實話是看到這段我先傻眼,看不懂這用法啦XD
你 幹嘛不寫 while(翻桌)

Data declarations 這段真的很神秘,我覺得腦袋都快要裂掉了XD
「一個指向指標的指標,它指向的指標是指向一個整型數」 (A pointer to a pointer to an integer)
我:兩層指標算常見嗎?
P:常見噢!
我內心:……「指向指標的指標」這個怎麼聽都很容易頭暈腦脹

「一個有10個整數型的陣列 (An array of 10 integers) 」
「一個有10個指標的陣列,該指標是指向一個整數型的 (An array of 10 pointers to integers)」
「一個指向有10個整數型陣列的指標 (A pointer to an array of 10 integers)」
只能意會不能言傳,奇怪了回頭一看反而中文看不懂英文卻能快速反應題目在說什麼orz


大致上理解了指標的意思,雖然僅是處於摸個皮毛的程度,但對我來說已經算是第一堂課很重要的突破了。
C語言的指標可以單獨拿一本書大寫特寫就只有講指標,而且聽起來好像還沒完沒了XD

跟系統要一段記憶體,不一定會是乾淨的
你自己要單純覆蓋寫資料上去就不用確定是否乾淨,反正都會弄髒

溢位很可怕溢位超可怕

Comments