C 學習筆記(四) C 核心程式設計

2021-10-08 21:53:08 字數 3735 閱讀 8647

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

記憶體分割槽的意義:

不同區域存放的資料,賦予不同的生命週期,給我們更大的空間和靈活度程式設計。

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域:

存放cpu執行的機器質量

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可

**區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令

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

全域性區還包含了常量區,字串常類和其它常量也存放在此

該區域的資料在程式結束後由作業系統釋放

/*

定義在外部的變數是全域性變數

區域性變數只在其函式內生效,外部引用需重新定義

*/int b =5;

//這是const修飾的全域性變數,全域性常量

const

int e =2;

intmain()

//返回乙個int型別的指標

int*

func

(int b)

intmain()

由程式設計師分配釋放,若程式設計師不釋放,程式結束時由作業系統**

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

示例:

int

*func()

intmain()

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

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

語法:new 資料型別(資料的值)

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

示例:

int

*func()

void

output()

void

output2()

for(

int i =

0; i <

10; i++

)//釋放陣列記憶體

delete

arr;

}int

main()

作用:給變數起別名

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

示例:

int

main()

int

main()

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

有點:可以簡化指標修改實參

示例:

void

swap

(int

&a,int

&b)int

main()

原理:引用可以理解為給變數起別名,用引用的方式來接收,等同於拿到了實參,可以對其進行修改。

這裡跟指標傳遞做乙個比較:

void

swap

(int

*a,int

*b)

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

注意:不要返回區域性變數引用

用法:函式呼叫作為左值。

示例:

int

&func_1()

int&

func_2()

intmain()

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

//發現是引用,轉換為int* const ref = &a;

vpod func

(int

& ref)

intmain()

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

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

示例:

#include

using

namespace std;

intmain()

#include

using

namespace std;

#include

//形參為引用,會修改實參的值

//void showvalue(int & val)

intmain()

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

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

示例:

#include

using

namespace std;

void

function

(int a,

int b,

int c =3)

intmain()

使用要點:

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

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

示例:

//第二個形參就是佔位引數,在函式中暫時用不到,起佔位作用

//呼叫函式時,必須給所有形參傳參

//如果佔位引數有預設引數,則可以不傳

void

function

(int a,

int=10)

intmain()

作用:函式的名稱可以相同,通過形參的不同來區分,提高復用性

函式過載滿足條件:

注意:函式的返回值不可以作為函式過載的條件

void

function()

void

function

(int a)

void

function

(double b)

void

function

(int c,

double d)

以上四個函式名稱都相同,但可以通過傳入的引數來區分。

但是以下寫法是錯誤的,理由是返回值不能作為函式過載的條件

void

function()

intfunction

(int a)

//都是引用作為形參,const修飾與不修飾為兩個型別,可以區分

void

function

(int

& a)

void

function

(const

int& a)

intmain()

注意:以下寫法具有二義性,無法判別呼叫哪個函式,應盡量避免。

void

function

(int a,

int b =10)

void

function

(int a)

intmain()

{function(10

);system

("pause");

return

0;

C 學習筆記06,C 核心程式設計

區 存放函式體的二進位制 由作業系統進行管理的 特點 共享 唯讀 全域性區 存放全域性變數和靜態變數以及常量 特點 程式結束後,系統釋放 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 在c 中主要利用new在堆區開...

C 學習筆記07,C 核心程式設計

作用 給變數起別名 語法 資料型別 別名 原名int main3 1 引用必須初始化 2 引用在初始化後不可改變 int main4 作用 函式傳參時,可以利用引用讓形參修飾實參 優點 簡化指標修改實參 void swap01 int a,int b 值傳遞 void swap02 int a,in...

C 學習筆記11,C 核心程式設計

物件的初始化和清理也是也是兩個非常重要的安全問題 乙個物件或者變數沒有初始狀態,對其使用,後果是未知的 使用完乙個物件或者變數,沒有及時清理,也會造成一定安全問題 c 利用建構函式和析構函式 解決上述問題,這兩個函式會被編譯器自動呼叫,完成物件的初始化和清理工作 物件的初始化和清理工作是編譯器強制要...