C 階段總結第二部分

2021-10-07 17:31:10 字數 3732 閱讀 7837

目錄

第二部分 c++核心程式設計一

1,記憶體分割槽模型

1.1程式執行前

1.2程式執行後

1.2new操作符

2.引用

2.1引用的基本使用

2.2注意事項

2.3引用做函式引數

2.4引用做函式返回值

2.5引用的本質

2.6常量引用

3,函式的提高

3.1函式的預設引數

3.2函式佔位引數

3.3函式過載

c++在程式執行時,將記憶體大方向劃分為4個區域

劃分的意義:不同區域存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計

未執行該程式前分為兩部分

**區:

存放cpu執行的機器指令

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可(.exe檔案每次執行都是這一段**)

**區是唯讀的,使其唯讀的原因是防止程式意外地修改了他的指令  (.exe檔案不能被修改)

全域性區:

全域性變數和靜態變數存放在此

全域性區還包括了常量區,字串常量和其它變數也存放在此(常量區包括:const修飾的全域性常量和字串常量)

該區域的資料在程式結束後由作業系統釋放(只要是區域性定義的都不在全域性區,不論是字串還是字元)

棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數等

int *ap(int a)

此時不論返回a的位址還是b的位址,都會出錯,因為形參也是區域性變數,所以當這個函式執行過後,都會被自動釋放。

#include#includeusing namespace std;

int b = 1;

int *ap()

int *aq()

int main()

堆區:由程式設計師分配釋放,如果程式設計師不釋放,則程式結束時由作業系統**

在c++中主要利用new在堆區開闢記憶體

指標本質上也是區域性變數,放在棧上,指標儲存的資料是放在堆區

int *ap()

c++中利用new操作符在堆區開闢資料

堆區開闢的資料,由程式設計師手動開始,手動釋放,釋放利用操作符delete

語法:new 資料型別

利用new建立的資料,會返回該資料對應的型別的指標

int *p = new int(10);     //堆區開闢乙個資料

delete p;       //釋放該資料

int *q = new int[10];     //堆區開闢乙個陣列

delete q;     //釋放該陣列

語法:資料型別 &別名=原名

int a = 10;

int &b = a;

int a = 10, aa = 20;

int &b = a;

int &c; //錯誤,引用必須初始化

&b = aa;//錯誤,初始化後,不可改變

b = aa;//賦值操作

作用:函式傳參時,可以利用引用的技術讓形參修飾實參

void swap(int &a, int &b)         //引用傳遞交換兩數的值

#include#includeusing namespace std;

void swap(int &a, int &b)

int main()

作用:引用是可以作為函式的返回值存在的

用法:函式呼叫作為左值

int &test1() 

int &test2()

特殊賦值方法,因為函式返回的是乙個引用,所以仍然可以賦值:eg:test2() = 111;

引用的本質在c++內部實現是乙個指標常量

int &a = b;     //轉換為 int *const a=&b;

a = 10;         //轉換為 *a=10;

作用:常量引用主要用來修飾形參,防止誤操作

在函式形參列表中,可以用const修飾形參,防止形參改變實參

const int &a = 10;    //轉換為int b=10; const int &a=b;

const使用場景,在當作形參時使用,防止資料被誤操作

void show(const int &a)

#include#includeusing namespace std;

void show(const int &a)

int main()

在c++中,函式的形參列表中的形參可以是有預設值的

語法:返回值型別 函式名(引數=預設值){}

int test(int a = 1, int b = 2, int c = 3)

注1:如果某個位置已經有了預設值,那麼從這個位置往後,從左到右都必須有預設值

int test(int a = 1, int b, int c)       //錯誤

注2:如果函式宣告有預設引數,函式實現就不能有預設引數『(宣告和實現只能有乙個預設引數)

int test(int a = 1, int b = 2, int c = 3);

int test(int a = 1, int b = 2, int c = 3)        //錯誤,宣告時,函式已經有引數了,所以實現不能有引數

c++中函式的形參列表裡可以有佔位引數,用來佔位,呼叫函式時必須填補該位置

語法:返回值型別 函式名(資料型別){}

void test1(int a, int)

作用:函式名可以相同,提高復用率

滿足條件:

返回值型別不可以作為函式過載的條件

函式過載的注意事項

void test(int &a)

void test(const int &a)   //這兩個可以構成過載

void test(int a)

void test(int a, int b = 10)    //因為包含預設引數,所以不能構成過載

Web API 第二部分

web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...

redux 第二部分

redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...

實驗二 第二部分

第二部分 ftp協議分析 1.兩個同學一組,a和b。2.在a主機上架設ftp伺服器 3.在b主機上執行wireshark,並登陸a主機的ftp伺服器,上傳一張,得到抓取的資料報,4.進行追蹤tcp流,顯示為原始資料,分析得到a主機登陸ftp的過程及使用者名稱密碼,還原上傳的,第二部分 ftp協議分析...