416 。。課後總結

2021-07-30 16:46:13 字數 4909 閱讀 9915

老師上課所講的內容,上傳,為以後複習用。

c語言基本的幾大模組:

資料型別

運算子三種結構順序:順序、選擇、迴圈

函式陣列

指標結構體、共同體、列舉

函式:為什麼要用函式這個概念?---模擬於生活中的寫文章;

現在有哪些:

main:從main開始執行,也是在main裡面結束,「生命週期」的概念;

生命週期:從出生到死亡的過程;

printf();

函式方面的知識點:函式三要素:定義、宣告、呼叫;

定義:這個是函式關鍵,是函式的實現部分,實現部分在{},在這裡編寫實現函式的功能**;

宣告:其實應該說函式原型的宣告,什麼是原型呢?就是函式的返回值、函式的名字、以及函式的引數列表;

函式宣告告訴我們是別人寫好的,我們只知道怎麼用就可以了,函式的編寫者會告訴你:函式有無返回值或者是函式的返回值是什麼、函式功能

用的時候需要提供哪些引數,什麼型別的引數;

呼叫:呼叫這個函式的功能唄;

函式引數:

實參:呼叫函式的時候傳進去的引數(值);

形參:函式定義的時候引數列表裡面的引數;

怎麼傳參的呢?

傳參不是通過引數的名字進行傳遞,實參和形參的名字沒有半毛錢關係;

傳參是按照順序進行傳遞的:實參列表裡的第乙個引數,傳遞給形參列表裡的第乙個引數,實參列表裡的第二個引數傳遞個形參列表裡的第二個引數,然後以此類推。。。

函式的形參有沒有個數沒有?----沒有,但是引數個數也太多,我見過引數最多的就是5個!

函式傳參的過程就是函式呼叫的過程:將實參拷貝乙份傳遞給形參,既然是拷貝說明只能是形參傳遞給形參,形參不能傳遞給實參,也就是單向傳遞的;

函式被呼叫之前,形參是不分配記憶體空間的:程式的執行不是憑空執行的,需要計算機提供一定的資源(cpu和記憶體),我們的變數就會占用一定的記憶體;

既然實參占用記憶體,那麼拷貝乙份給形參當然也需要記憶體了;函式的形參分配在棧空間,什麼是棧空間呢?計算機自動分配和**,我們程式設計師自己不用管!

棧空間是「髒的」,

int a;//編譯器分配一段棧空間a,存在的情況是棧空間a之前被編譯器分配給其他的變數使用過了,使用之後沒有進行必要的清理,所以這個時候再

分配給a,那麼儲存的還是原來的值;

呼叫的時候才給形參分配棧空間,函式呼叫結束之後棧空間自動釋放;

注意一點:對應位置的實參和形參的資料型別保持一致;

有時候正確的結果,這是理論上!

我們的例子是傳值呼叫,以後指標可以「傳址呼叫」;---歸根到底,傳址呼叫本質上也是傳值呼叫,因為位址也是數值,只不過我們把位址傳過去之後,

可以通過位址來改變位址所對應的記憶體空間裡的值;

函式巢狀呼叫:比如說在fun1函式裡,呼叫fun2函式;

函式遞迴呼叫:函式呼叫自己本身;典型的例子:1*2*3*4.。。。*n

函式的返回值:

為什麼需要函式的返回值?

我們函式執行的目的,一:過程;printf("....\n");二:結果

return 數值;

數值要保持函式定義的時候前面的資料型別一致;

int add()

返回到函式呼叫的地方;

呼叫的時候;得保持現場,你得知道呼叫過了之後,還得回得來;   分配棧空間,函式執行過了之後還得釋放棧空間;

函式的名字:

定義的時候有兩個要求:1、合法;2、合理

合法:定義的要求和定義變數的時候一樣;

合理:函式看起來優美,容易理解,通過這個名字就大概可以知道函式的功能,優美看起來舒服唄;

定義函式名字有兩種方式:

1、linux核心的定義方法:int_to_string

2、駝峰式:inttostring

以後進什麼公司,公司裡怎麼定義的你就怎麼定義;

函式定義的不要太長太複雜;

模組名_體現函式功能:ad、iis、uart

ad_init();

陣列:1、為什麼要學習陣列?

總結:有時候需要定義很多變數,如果用一般的定義方式顯得麻煩,並且容易出錯,所以就引用陣列的這個概念;

定義陣列和定義一般變數的比較:

沒有誰好誰壞,只有適合與不適合;*****=》什麼時候用陣列定義?什麼時候用一般變數定義?

2、怎麼定義陣列?

比如:int nun[4];//資料型別 陣列名[常量];  常量:5 3+2;

int add(int n)

3、怎麼使用陣列?

定義的是時候呢,你可以整體定義;但是使用的使用必須乙個乙個使用:1、通過下標,int num[4];

num[0]:使用陣列中第乙個元素;

num[1]:使用陣列中第二個元素;

以此類推;但是最後乙個陣列是;int a[n];===>a[n - 1];

非要使用:a[n]; //大家不要越界使用,學習語言語言的時候根據規定來,語言相當於乙個使用使用說明書,你是學習它的,不是改變他的;

4、怎麼初始化陣列?

分為兩類:

1、完全初始化:int a[4] = ;

2、不完全初始化:int a[3] = ;

a[0] = 33,a[1] = 0; a[2] = 0;

正常分析的話:三種情況:①都是33;②第乙個是33,後面的都是0;③11 11 11;

學習方法:學習 = 基礎知識 + 合理推斷;

沒有基礎知識,再強的合理推斷也沒用;

但是即使你有了基礎知識作為鋪墊,沒有合理推斷能力,那也是死記硬背啊!

小結:基礎知識和合理推斷兩者缺一不可;

int a[3] = {};//a[0] = 0,a[1] = 0,a[2] = 0;

int a[3] = ;//跟上面是等價的;

//int a[3]; //沒有初始化的;隨機值!

第一種:

int a; //定義;

a = 1; //賦值;

第二種:

int a = 1; //初始化===》定義的同時賦值;

int a[3] = {};//給a[1] = 4;a[0]、a[2]不考慮;

#if 0

int a[3];

a[1] = 4;

#endif

int a[3] = ;

gcc裡面特有的:int a[3] = ;

/****分析方法和驗證方法;  ******/

5、二維陣列;

int a[n][m]; //n,m 是常量!

int a[3][4]; //二維陣列由3個一維陣列組成,然後每個一維陣列裡面包含了4個元素;

a[0][0] a[0][1]a[0][2]a[0][3]

a[1][0] a[1][1]a[1][2]a[1][3]

a[2][0] a[2][1]a[2][2]a[2][3]

二維陣列在記憶體中的儲存方式:按行存放,先放第一行,再放第二行。。。。。依次類推!

引用:a[i][j] = 4;//i代表行,j代表行,i和j都是從0開始!

初始化:int a[3][4] = ,{},{}};

int a[3][4] = ;

gcc裡面特有的初始化方式:a[1][2] = 5;

a[3][4] = ;//可以的;

//a[3][4] = {};

6、字元陣列:

為什麼要單獨提出來講呢?

char ch[4] = ;

char ch = ;

char ch[11] = ;

字串的結尾標誌是'\0';

遍歷字串的時候,遍歷是'\0'預設為字串結束了,然後'\0'前面的字元就是字串的內容;

輸入字串的時候:hello  系統會自動在o後面加上乙個'\0'表示字串結束;

『\0』佔儲存空間的;

sizeof(ch);  //11,加'\0',畢竟'\0'佔儲存空間的;

strlen(ch); //10,因為'\0'表示字串結束,字串的真正內容是'\0'前面的字元,當然不算'\0';

『\0』是個什麼玩意呢? ascii表---'\0'==>0   什麼都不顯示!

int a[5] = ;

sizeof(a); ///定義了整型陣列,然後陣列元素是5個,每乙個整型數所佔位元組是4個位元組,那麼5個呢:4*5 = 20;

sizeof(a)/sizeof(a[0]);//實現什麼功能?陣列個數!

陣列裡面的資料型別都是一樣的啊,不是說可以2個int和3個float!!!!

陣列的基本應用:

1、氣泡排序:

2、選擇排序:

是排序中最簡單的,也是筆試題考的比較多的,所以單獨講一下,要求必須掌握!

編譯預處理:

1、巨集定義:

不帶引數:#define max 100

帶引數的巨集定義: #define s(a) a*a//巨集函式;

「」裡的內容不替換;

帶參的巨集定義最好加上();

舉個例子:s(a) a*a     s和(之間沒有空格

帶參的巨集定義稱為巨集函式:

筆試題和面試題:

巨集函式和自定義函式的區別:

1、巨集函式在預處理階段進行替換,自定義函式是在編譯期間進行處理;

2、巨集函式沒有型別,自定義函式有型別;

3、因為巨集函式只是進行簡單的替換,自定義函式呼叫的時候還得分配棧空間、儲存現場,所以巨集函式執行效率比自定義函式高;

4、也是因為只是進行簡單的替換,所以不進行語法檢查,自定義函式進行語法檢查;

既然巨集函式執行效率高,而自定義函式進行語法檢查,各有優點;

內聯函式:inline

內建巨集:

兩個下劃線連起來的!

typedef:不是在預編譯處理階段處理的;

2、標頭檔案包含:#include

#include "stdio.h"

區別要知道,要不然就是個假的程式設計師;

3、條件編譯:

#if 巨集名

...#elif

....

#endif

Day1 課後總結

day1課後總結 目錄 提公升英語能力 絕大多數程式設計 由英語單詞構成 使用正確的學習方法 克服學習疲勞 學會自我切換學習方向,每天上課學習python以外可以拿出半個小時看英語單詞或者是理財投資 鍛鍊自我解決問題能力 typora詳細介紹請移步至本人另一篇部落格 語言 即人與人溝通交流之間的媒介...

Day3課後總結

目錄前言 2.7版本和3.6版本是當時版本最穩定且功能齊全的版本,所以大部分的程式設計師都會用這兩個版本。如果我們出去工作了碰到了公司有較老的專案可能就需要用python2.7去進行維護,因此我們電腦中要安裝多個版本的python 情況一 在cmd視窗中 2.將兩個版本的python所在路徑都新增到...

計算機導論(11 22)課後總結

計算機都是在圖靈機的基礎上發展來的,圖靈機定義了現代計算機的核心部分,即輸入輸出裝置,cpu,內部儲存器。圖靈機是為了用機器模擬人的運算過程而實現的,當圖靈機從紙帶 tape 上讀取乙個空格的資訊,它就會根據控制器當前的狀態和控制規則 控制規則由控制器中的program提供 改變控制器的當前狀態,應...