快速上手系列-C語言之基礎篇(一)

2021-01-13 濁酒敬風塵

按照之前的計劃,這篇文章本該寫C語言簡介,包括一些歷史背景,發展狀況, 語言特點什麼的,這些東西著實比較囉嗦。

吃飯用的筷子,到現在我都不知道它的由來,不知道它是在什麼歷史背景下誕生的

有些東西還是有必要了解一下,比如,C語言所產生的代碼運行速度比彙編語言編寫的代碼運行速度稍慢一點,但還是有得一拼,同時C語言要比彙編語言編寫的代碼可讀性高,可移植性好。另外,相對於其他高級語言,比如C++、java、C#等來說,C語言編寫的代碼運行效率要高。

在介紹C語言的數據類型和基本語法之前,先說說C程序結構和C文件結構。

1、C程序結構:

①預處理指令;

②變量、函數、語句、表達式、注釋等;

③返回值;

以一段簡單的列印輸出「hello world」代碼為例:

注意:一個完整的C語言程序,是由一個、且只能有一個main()函數(又稱主函數)和若干個其他函數結合而成,或僅由一個main()函數構成;

接下來看看C語言程序運行結構:基本的三種程序結構為順序結構、選擇結構和循環結構。

順序結構:程序按順序執行,不發生跳轉。選擇結構:依據是否滿足條件,執行相應功能。(1)if(表達式) 語句;(2)if(表達式)語句1;else語句2;(3)if(表達式1)語句1;else if(表達式2)語句2;...else語句n;注意:第三種方式,即: if......else if..........else if.....else,只能響應一個條件。循環結構:

while ( ) { } 語句 先判斷表達式後執行.

do{ }-while( ) 語句 先執行語句後判斷表達式.

for( ; ; ){ }

2、C文件結構:

一個基於C的軟體系統一般由以下文件構成:

若干個C文件:每個C文件中包含若干個函數。若干個頭文件:每個頭文件中包含一些數據結構的定義以及C函數、變量的原型聲明。若干個庫文件:庫文件是編譯後的二進位文件,一般由若干C文件編譯後組成,其中包含了若干個函數的可執行代碼;這些庫文件中的函數可執行代碼在連接的時候合併到最終的可執行文件中。若干個make文件:make文件描述了多個文件中的依賴關係以及生成最終可執行文件或庫文件所需要的信息。

由於篇幅較小,再加點內容,順便寫寫C語言的關鍵字和控制語句。

1、關鍵字:

這裡介紹下C語言的32個關鍵字(至於ISO推出的C99標準新增的5個C語言關鍵字和C11標準新增了7個C語言關鍵字目前沒有做過過多了解,這裡就不再介紹)

(1)數據類型關鍵字(12個)

char,short,int,long,float,double,unsigned,signed,void,struct,union,enum;char:字符型類型數據short:短整型數據,修飾int,一般省略被修飾的int;// short int a = 10;一般寫成 int a = 10;int:整型數據,通常為編譯器指定的機器字長;long:長整型數據,修飾int,一般省略被修飾的int;float:單精度浮點型數據;double:雙精度浮點型數據;unsigned, signed是修飾符,分別表示無符號和有符號,我們時常寫的「 int a=123;」其實就是「signed int a = 123;」,表示有符號整型void: 聲明函數無返回值或無參數,修飾指針時表示無類型指針,void不可用來定義變量,但可以用它來修飾各種變量;struct:用來聲明結構體;union:用來聲明共用體或者叫聯合體;enum:用於枚舉類型的聲明;關於結構體,共用體,枚舉的用法以及結構體和共用體的區別以後單獨再寫;(2)控制語句關鍵字(12個)if,else,for,do,while,break,case,continue,default,return,switch,goto(儘量別使用);(3)存儲類關鍵字(4個)auto,extern,register,staticauto:聲明自動變量(很少使用);extern:聲明變量外部可用,可以置於變量或者函數前,以表示變量或者函數的定義在別的文件中,可以外部使用;static:聲明靜態變量,static修飾的變量存儲在靜態變量區,修飾全局變量時,表示該變量為全局靜態變量,作用域為當前文件;修飾函數時表示函數作用域為當前文件內部; 修飾局部變量時,表示該變量為靜態局部變量,只被初始化一次,賦值之後值會保持最新的值,也就是說局部靜態變量的生命周期被擴展到整個程序運行的時間段內。這裡不知道有沒有說清楚,乾脆看個例子簡單明了:

register:聲明寄存器變量,修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。註:register變量必須是能被CPU所接受的類型,這通常意味著register變量必須是一個單個的值,並且長度應該小於或者等於整型的長度。不過,有些機器的寄存器也能存放浮點數。因為register變量可能不存放在內存中,所以不能用「&」來獲取register修飾變量的地址,如:

(4)其他關鍵字(4個)

const,sizeof,typedef,volatileconst:const修飾變量,表示被修飾的變量不可被當前線程或進程改變;例如:const int *p = 100; //const修飾int *,表示*p的值不可變*p = 50; //錯誤,*p的值不可變再比如:int a = 0;int b = 0;int * const p = &a;//const修飾指針p,表示指針變量地址不可變;p = &b; //錯誤,地址不可變,不能指向其他地址;sizeof:計算數據類型長度或者變量佔內存空間大小,sizeof長得像函數,其實它是個關鍵字;typedef:為某種數據類型定義一個新的名字;volatile:確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值,簡單地說就是防止編譯器對代碼進行優化。比如如下程序:num=0x65;num =0x66;num =0x67;num =0x68;對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器就不能像對待純粹的程序那樣對上述四條語句進行優化,只認為 num=0x65(即忽略前三條語句,只產生一條機器代碼)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器代碼(四條)

2、語句

C語言利用函數體中的可執行語句,向計算機系統發出操作指令;按照語句功能或構成的不同,可將C語言的語句分為5類:

(1)控制語句(9條,可以細分為三種):

選擇結構控制語句if()~else~, switch()~循環結構控制語句for()~, while()~, do~while(), break, continue其他控制語句return, gotoreturn功能:終止執行函數,賦值(可選); 將控制權返回給調用函數的下一條語句goto:無條件轉移語句,跳轉語句;

如上代碼,在不使用goto的情況下,會分別列印出line 1、line 2、line3,在列印完line 1後使用goto語句,則直接跳轉到goto目標代碼,即代碼中的end部分;

(2)函數調用語句:

函數調用語句由一次函數調用加一個分號構成.例如:printf(「hello world!」);scanf(「%d」,&num);

(3)表達式語句:

表達式語句是由表達式後加一個分號構成,例如:「num = 10」是表達式,「num = 10;」是賦值語;

(4)空語句:

空語句由一個分號構成,空語句什麼操作也不執行.。

(5)複合語句:

複合語句由大括號括起來的一組語句構成。{{ } //複合語句,注意大括號後不需要分號}複合語句一般與其它語句配合使用:如for( ; ; ) { }

這玩意兒想的時候不多,寫起來卻很多,深究起來就多的完全說不完(┬_┬),C語言基礎部分本應該在本篇文章中寫完,由於時間問題,下次再寫吧。

下篇開始說說數據類型,運算符與表達式,想了解的小夥伴們,可以關注收藏,後續內容請見下回分解。

相關焦點

  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • C語言基礎(下)
    C語言的世界結構體類型什麼是結構體我們觀察現實世界的時候,可以發現很多的東西它都是由不同的部分組合起來的定義結構體struct 數據類型名{//結構體數據成員列表};示例struct Student{char * name;char * gender;char * mail;int age;};聲明結構體變量方式一struct
  • 零基礎看得懂的C語言入門教程
    一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由於自己是從初一時開始學習編程,深知學習編程的痛苦。此次編寫計劃編寫一個快速入門的系列以及另一個全方面學習C語言的系列。快速入門系列以輕鬆、愉悅的方式編寫,並且剝離了入門階段極少使用的技術及概念,通過最「接地氣」的方式使剛入門的新手學習到最符合當前階段的知識,計劃閱讀時長為3小時即可完成C語言關鍵內容的掌握,並且達到期末不掛科的水平。
  • 單片機C語言基礎專題05 - 邏輯運算
    STC8G單片機基礎仿真板:老司機開車,請坐穩。
  • python與c語言的語法有哪些不一樣的
    在眾多程式語言之中,想必很多人都聽說過Python和C語言,在進行編程學習之前,大家都會問:python和c語言的區別有哪些?我該如何選擇?接下來我們來看看吧。python與C的區別如下:1、語言類型:Python是一種基於解釋器的語言,會逐行讀取代碼,將Python編譯為字節碼,由大型C程序解釋;C是一種編譯語言,完整的原始碼將直接編譯為機器代碼,由CPU直接執行。
  • 新手篇:《第九所》如何快速上手?
    《第九所》,一款由網易研發重現國家科研工作者艱苦奮鬥、默默奉獻的沙盒式遊戲,而你曾耳熟或見證的「載人航天」、「兩彈一星」都將會在這款遊戲中為你再度演繹,讓你感受到祖國的強大以及為我們傳遞的精神。那麼關於《第九所》新手前期該如何快速上手?又需要注意哪些呢?
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。4、在{ }裡面每一句話後面都有一個分號(;),在c語言中,我們把以一個分號結尾的一句話叫做一個c語言的語句,分號是語句結束的標誌。
  • QooCam 8K 快速上手指南
    (超有趣的「小行星」 from SilverQi)(傳說中「別人家的作品」 from SilverQi)別急著眼饞,小Q將帶你快速了解QooCam 8K的開箱及上手操作,即使是第一次使用全景相機的小白那麼接下來的QooCam 8K快速上手視頻,讓你2分鐘就能學會最基本操作!
  • 如果是初學C語言請看完,如何學好C語言絕對精品
    C語言是各大作業系統的基礎,Unix、Linux、Windows其內核都清一色是C語言開發的,(某些地方是和彙編語言混合開發的),君不見Windows API都是C語言函數的接口?不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很紮實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?
  • 怎樣學習C語言(獻給迷茫的C愛好者)!
    C語言是各大作業系統的基礎,Unix、Linux、Windows其內核都清一色是C語言開發的,(某些地方是和彙編語言混合開發的),君不見Windows API都是C語言函數的接口?只是這本書並不十分適合剛開始學習的人,假設你曾經學過C語言,有那麼一些C語言的基礎但又不是非常紮實,那麼你能夠嘗試一下這本書。我相信,僅僅要你理解了指針,C語言便不再神奇。  假設你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • 單片機的程式語言:彙編語言、C語言、PL/M和BASIC語言
    5.兼容性好PL/M一51可同彙編語言或其他語言的目標模塊連接起來,生成可執行代碼。如果用戶必須使用彙編語言編制一段程序,或是想利用已調好的彙編語言程序塊,那麼該段彙編可以很方便地連接到PL/M一51程序目標塊中。
  • 0基礎快速上手!輕鬆場均MVP
    沒關係,雨澤這就來教同學們曜的玩法,雨澤準備分為三篇(基礎、連招、克制方法)對曜進行剖析,全部看完你的曜水平肯定直線上升!一技能:當你兩格能量想打傷害時,就可以用兩段一技能甩在敵方臉上(普通與強化的唯一差別就是,強化一技能釋放後將會增加自身攻擊速度,並不會增加一技能傷害);一技能的優點在於可移動釋放,即不需要站在原地釋放技能(也就是專業用語中的無硬直
  • lol狼人如何快速上手 玩好狼人裝備怎麼出
    lol狼人如何快速上手 玩好狼人裝備怎麼出時間:2017-02-24 20:04   來源:川北在線整理   責任編輯:毛青青 川北在線核心提示:lol狼人如何快速上手?玩好狼人裝備怎麼出?很多玩家還不是很清楚呢,那麼下面小編就來給各位玩家細細講解一下。
  • keil c語言編程常見問題解析(一)
    實用乾貨下載:關注我們「單片機系列」,回復「資料
  • keil C語言與彙編語言混合編程
    無參數傳遞的函數調用C51調用彙編函數1.無參數傳遞的函數調用先來個例子:其中example.c和example.a51為項目中的兩個文件*example.c*extern void delay100();main(){delay100;}*example.a51*?PR?
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 細節解析讓你快速上手!
    丨本篇是英雄體系分析最近有小夥伴和我聊到「孫白楊」體系,這個體系是目前多排中非常火的一個體系,因為最近沒怎麼上分,在娛樂局中也沒有遇到過這個體系,在和這位小夥伴聊完之後,我也是找了三個隊友來測試了一下這個組合的強度,真是不試不知道,一試嚇一跳,這個組合真的是非常恐怖,拿來上分是非常輕鬆的。
  • C語言基礎:標識符
    標識符:在程式語言中,標識符是用戶編程時使用的名字,變量、常量、函數、語句塊都有名字。是用來標識某個實體的一個符號,是對變量名、函數名、標號和其他各種用戶定義的對象命名。C語言中標識符的命名規範:1.標識符由字母、數字、下劃線組成,並且首字母不能是數字。(C 標識符內不允許出現標點字符,比如 @、$ 和 %。)2.標識符對大小寫敏感,即嚴格區分大小寫。一般對變量名用小寫,符號常量命名用大寫。