c基礎知識複習

2021-09-06 16:29:15 字數 2411 閱讀 3735

c的發展歷程

c原本是為了開發unix作業系統而設計的語言;如此說,應該c比unix更早問世,而事實並非如此,最早的unix是由彙編寫的;

c語言本來是美國人開發的,解讀c的宣告,最好還是用英語來讀;

解讀c宣告的步驟:

1、首先著眼於識別符號(變數名或者函式名)

2、從距離識別符號最近的地方開始,依照優先順序解釋派生型別(指標、陣列和函式)。優先順序說明如下:

a、用於整理宣告內容的括號;

b、用於表示陣列的[ ],用於表示函式的( )

c、用於表示指標的*

3、解釋完成派生型別,使用 「of」、 「to」、「returning」將它們鏈結起來;

4、最後,追加資料型別修飾符(在左邊, int、double等)

int  (*func_p)(double);

1、著眼於識別符號。即:func_p  /*/  func_p   is

2、因為存在括號,著眼於括號*:  /*/func_p is  pointer  to 

4、最後、解釋資料型別修飾符int : /*/  func_p  is pointer  to function (引數是double) returning int

翻譯成中文:func_p 是指向返回值為int 的函式的指標;

c語言的宣告不能從左往右按順序解讀;而是左右來回地解讀;

基本型別和派生型別:

int  (*func_table[10])(int  a);

func_table  is  array(元素個數為10)   of  pointer  to function(引數int型別)   returning  int

上面的表示方法叫做「型別鏈的表示」

c的派生型別:

1、結構體  2、共用體  3、指標(指向的型別不同)  4、陣列  5、函式(引數不同)

指標型別派生:

對指標進行加法運算,指標只前進 指標所指向型別的大小的距離,這一點具有非常重要的意義;

「指向陣列的指標」,

錯誤理解:陣列名後不加[ ] ,不就是「指向陣列的指標」嗎?

的確,在表示式中,陣列可以被解讀成指標,但是, 這不是「指向陣列的指標」, 而是「指向陣列初始元素的指標」

(之後就是涉及乙個+1指標的跨度問題,很經典的問題)

c的宣告中, [ ]比*的優先順序高----------這一點很重要,在分析宣告過程中;

c語言中不存在多維陣列:

int   [2][3]模型如下:

c語言中不存在多維陣列。看上去像多維陣列,其實是「陣列的陣列」

共用體的語法和結構體相識,但是,結構體的成員是「排列地」 分配在記憶體中, 而共用體的成員則是「重疊地」分配在記憶體中;

分析世界上最有名的程式:

printf("hello  world \n");

第1個引數總是傳遞字串常量;

可是,在stdio.h的原型宣告中, printf()的第1引數被定義為:「指向char指標」

字串常量的型別為「char 的陣列」, 因為在表示式中,所以它也可以當成 「 指向cahr的指標」。以此,字串常量可以傳遞給printf() 是很自然的事;

變數:作為變數,它有作為「自身的值」使用 和 作為「自身的記憶體區域」使用兩種情況;

表示式代表某處的記憶體區域的時候,我們稱當前的表示式為「 左值(lvalue)」,

相對的是,表示式只是代表值的時候,我們稱當前的表示式為「右值」

表示式中有時候存在左值,有時候不存在左值;

」左值「這個詞彙的由來:

在c以前的語言中,因為表示式在賦值的左邊,所以表示式被解釋成左值。「左」在英文中是left, left value 就被簡寫成lvalue

但在現代c中,++var這樣寫法也是合法的,此時var是指某處的記憶體區域,但是怎麼看也看不出「左邊」的意思。因此,左值這個詞真有點讓人摸不著頭腦;

在標準委員會的定義中, lvalue的l不是left的意思,而是表示locator(指示位置的事物)。

複習C (一) 基礎知識

命名空間讓廠商能夠將其產品封裝在乙個叫做命名空間的單元中,這樣就可以用命名空間的名稱來指出想使用哪個廠商的產品。例 microflop wanda piscine wanda 僅當頭檔案沒有副檔名h時,各種c 編譯器的標準組建才被放置在命名空間std裡。std,即standard,c 標準庫中的函式...

C語言基礎知識複習

整型常量有3種表示方式 十進位制整數。例如,123 456 0。八進位制整數。以0開頭的整數是八進位制數。例如,0123表示8進製數123,等於十進位制數83。十六進製制整數。以0x或0x開頭的整數是十六進製制數。例如,0x123或0xl23表示十六進製制數123,等於十進位制數291。如果在整型常...

C 基礎知識複習(一)

資料型別,常量與變數部分 發現有些點竟然這麼多年第一次發現 c 基本資料型別有哪些 答 整型,浮點型,void型。注 其他各種資料型別均是這三種型別的擴充,另外void型別在實際程式中經常用來表示指標無型別,指向整塊記憶體,程式可以自行根據需要進行解析。2.整型的分類及區別 答 表示整數,字元,布林...