基于Linux下的C語言入門-day1

經(jīng)歷了一禮拜的ruby on rails的全棧開發(fā)了解,覺得自己基本上已經(jīng)放棄了目前基于Mac OS下開發(fā)的堅持,一來自己的筆電已經(jīng)用了4年,開個MAC虛擬機(jī)占用的內(nèi)存基本上已經(jīng)到頂,切回Window界面會卡一會,而且在蘋果系統(tǒng)內(nèi)操作也是那種延遲的感覺,所以我立馬買了一塊kinston的4G內(nèi)存條,打算改善一下愛機(jī)的身體~

所以呢,網(wǎng)站全棧開發(fā)先放一放罷。一是自己將來專業(yè)是通信,接觸到網(wǎng)站設(shè)計開發(fā)的機(jī)會可能在兩年內(nèi)為0,除非自己非常喜歡做網(wǎng)頁,有那種成就感;二是將來打算搞前端開發(fā),那時候可能就會比較吃香。。。

話說回來,通信行業(yè)用的編程最多的語言無非就是C,C++,C#,再加上熟悉一門操作系統(tǒng)LInux,把這幾門語言精通一兩個,不管是在研究生做項目還是將來工作都是挺管用的,至少不會被老板說這個不會那個不會~這次來把昨天學(xué)的c語言基礎(chǔ)知識回顧一遍,至少把它用文字表達(dá)出來,回顧一次可能會有新的收獲。


linux

Linux作為開源操作系統(tǒng),深受廣大程序員的喜愛。不僅是因為它完全免費,而且支持多任務(wù),多用戶,界面友好,支持多種平臺。而在這里一個很大的特點就是可以當(dāng)做嵌入式操作系統(tǒng)來使用,而且現(xiàn)在到處都是嵌入式的設(shè)備了,銀行的pos機(jī),火車站的自動取票機(jī),都有嵌入式的身影。

首先你得裝一個虛擬機(jī),我是VMware12版本,操作系統(tǒng)我選擇ubuntu,現(xiàn)在版本可能已經(jīng)更新到了1604,而我能還在用1204,尷尬。。。

編輯器linux有自帶的vi,但是我用的是windows下的source insight,感覺比較人性化,可以跨平臺在linux的gcc下編譯。

c語言要寫的好,要讓別人看得懂,要好易維護(hù)。要注意以下幾點:

1.賦值,變量堆在一起;

2.相關(guān)功能的語句堆在一起;

3.調(diào)用函數(shù)在一起;

4.適當(dāng)加一些注釋;

5.對變量習(xí)慣性的賦初始值。


需要知道的是int main(void)這里的void不是空的意思,空我們一般都用null表示,這里是指不接受任意參數(shù)。對于幾種數(shù)據(jù)類型了解他占幾個bit,就是占幾位。注意數(shù)據(jù)類型的長度是隨著CPU類型和編譯器的不同而改變,像以前turbo c上int只占2位,而我們現(xiàn)在的環(huán)境下通過sizeof()函數(shù)顯示的是4位,long int=int =4位。而long double=12位~


對于常量和變量,常量不占用內(nèi)存空間,不可變。而變量分為全局變量和局部變量,全局變量在開始運行時初始化,在main函數(shù)完全結(jié)束后才會釋放,從開始到結(jié)束都會占用內(nèi)存;局部變量在定義代碼塊時初始化,函數(shù)一結(jié)束就被釋放~所以我們一般不用全局變量,因為占內(nèi)存,而且通用性比較差。


對于操作符,有賦值操作符;乘除操作符,取模操作符。有個好玩的題目,老板發(fā)錢:第一天給你1元,第二天2元,第三天4元,那么第30天可以賺多少呢?不用pow函數(shù)去算,用自己思考的算法去解決。這里當(dāng)然需要用到while循環(huán),以下是循環(huán)語句:

while(days <= 30){

total += start;

days += 1;

start = start *2

printf("days:%d,start:%d,total:%d\n",days,start,total);

}


在語句中盡量避免運算符++ 和 - -,因為不同的編譯器可能會出現(xiàn)不一樣的操作順序,因為他們的優(yōu)先順序僅僅比()低而已。

形參和實參:int sum(int a,int b),這括號里面的就是指形參,即函數(shù)聲明。函數(shù)調(diào)用傳遞一個值時變量有值了,這便是實參~

static 修飾全局變量時,表示該變量在本文件中使用;修飾局部變量時,將該局部變量與全局變量一起存儲,再次使用時保存了上次調(diào)用的值。

static的兩個法則:

若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態(tài)全局變量,以降低模塊間的耦合度

若全局變量僅由單個函數(shù)訪問,則可以將這個變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度。


還一個要注意的就是scanf("%s, str");這個時候定義的char str[32]="0",相當(dāng)于ASCII碼中的0所對應(yīng)的48;而char str[32]={0}就是賦初始值為0.而第一句的str是定義的一個字符串?dāng)?shù)組,而我們要記住的是:數(shù)組名就是數(shù)組的首地址,并且是第一個元素的地址。頭腦中可以想象一下擺列整齊的內(nèi)存,在最前面大頭針的就是首地址,今后學(xué)習(xí)指針時還需深入挖掘呢~

執(zhí)行多文件,多模塊編譯時,要gcc 主c文件還有各個函數(shù)c文件,注意.h頭文件也要寫好,因為主函數(shù)要調(diào)用。.h文件如下定義:

#ifndef _SUM_H

#define _SUM_H

int sum(int x,int y)

#endif

諸如此類編寫.h文件~


最后還是來介紹一下linux下的編譯操作,需要在windows下通過虛擬機(jī)共享文件到Ubuntu上,cd/mnt/hgfs/linux_code這幾步就進(jìn)入了自己在win下碼的代碼。使用gcc main.c就開始編譯,如果不報錯,打./a.out,就可以執(zhí)行結(jié)果(相當(dāng)于雙擊)。一般打完首字母后打tab鍵,會補(bǔ)齊剩下的單詞,前提是要存在這個文件或目錄。

遇到段錯誤怎么辦?一般這樣做:

gcc main.c -g

gdb a.out

r

bt

之后終端會顯示出具體的錯誤行數(shù),之后去認(rèn)真修改就好了~

圖片發(fā)自簡書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容