老師上課所講的內容,上傳,為以後複習用。
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提供 改變控制器的當前狀態,應...