C語言學習筆記---查漏補缺

1、強制類型轉換表達式:(數據類型) (表達式)
2、C語言的頭文件:C語言的頭文件中包括了各個標準庫函數的函數原型。因此,凡是在程序中調用一個庫函數時,都必須包含該函數原型所在的頭文件。
表達式:#include stdio.h

3、break是跳出當前整個循環,continue是結束本次循環開始下一次循環。

4、goto語句是一種無條件分支語句.

5、自定義函數:

A、[] 包含的內容可以省略,默認是 int 類型函數; 函數還有很多叫法,比如方法、子例程或程序,等等。

B、返回類型:一個函數可以返回一個值。return_type 是函數返回的值的數據類型。有些函數執行所需的操作而不返回值,在這種情況下,return_type 是關鍵字 void。

return返回的函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數返回類型爲準,自動進行類型轉換。

return_type function_name( parameter list )
{
   body of the function
}

6、

形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數。

實參是在調用時傳遞該函數的參數。

形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。

實參可以是常量、變量、表達式、函數等。

7、變量存儲類別

C語言根據變量的生存週期來劃分,可以分爲靜態存儲方式和動態存儲方式。

靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變量;函數調用時的現場保護和返回地址等。

C語言中存儲類別又分爲四類:

A、用關鍵字auto定義的變量爲自動變量,auto可以省略,auto不寫則隱含定爲“自動存儲類別”,屬於動態存儲方式。如:

B、用static修飾的爲靜態變量,如果定義在函數內部的,稱之爲靜態局部變量;如果定義在函數外部,稱之爲靜態外部變量。如下爲靜態局部變量:

注意:靜態局部變量屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變量在編譯時賦初值,即只賦初值一次;如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。

C、爲了提高效率,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。例如:

注意:只有局部自動變量和形式參數可以作爲寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量;局部靜態變量不能定義爲寄存器變量。

D、用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之後定義的變量

8、內部函數與外部函數

在C語言中不能被其他源文件調用的函數稱謂內部函數 ,內部函數由static關鍵字來定義,因此又被稱謂靜態函數,形式爲: 
static [數據類型] 函數名([參數])
這裏的static是對函數的作用範圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱謂外部函數 ,外部函數由extern關鍵字來定義,形式爲: 
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用範圍時,系統會默認認爲是外部函數,因此當需要定義外部函數時extern也可以省略。

9、什麼是指針

指針是一個變量,其值爲另一個變量的地址,即,內存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明

所有指針的值的實際數據類型,不管是整型、浮點型、字符型,還是其他的數據類型,都是一樣的,都是一個代表內存地址的長的十六進制數。不同數據類型的指針之間唯一的不同是,指針所指向的變量或常量的數據類型不同。

參考:https://blog.csdn.net/qq_41035588/article/details/79673674

int main ()
{
   int  var = 20;   /* 實際變量的聲明 */
   int  *ip;        /* 指針變量的聲明 */

   ip = &var;  /* 在指針變量中存儲 var 的地址 */

   printf("Address of var variable: %x\n", &var  );

   /* 在指針變量中存儲的地址 */
   printf("Address stored in ip variable: %x\n", ip );

   /* 使用指針訪問值 */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

10、宏定義

宏定義和全局變量的區別:

1. 宏會在預處理階段被替換,而全局變量是在運行時; 
2. 宏定義不分配內存,全局變量定義需要分配內存; 
3. 宏不區分數據類型,它本質上是一段字符,在預處理的時候被替換到引用的位置,而全局變量區分數據類型; 
4. 宏定義之後值是不能改變的,全局變量的值是可以改變的; 
5. 宏定義只有在定義所在文件,或引用所在文件的其它文件中使用。 而全局變量可以在工程所有文件中使用,只需在使用前加一個聲明。
 

參考:https://www.cnblogs.com/little-ant/p/3463080.html

https://www.cnblogs.com/jiajuanjuan0521/p/3391104.html

https://www.cnblogs.com/mobius2018/p/9843403.html

11、預處理器:C 預處理器不是編譯器的組成部分,但是它是編譯過程中一個單獨的步驟。簡言之,C 預處理器只不過是一個文本替換工具而已,它們會指示編譯器在實際編譯之前完成所需的預處理。我們將把 C 預處理器(C Preprocessor)簡寫爲 CPP。https://www.w3cschool.cn/c/c-preprocessors.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章