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 利用建構函式和析構函式 解決上述問題,這兩個函式會被編譯器自動呼叫,完成物件的初始化和清理工作 物件的初始化和清理工作是編譯器強制要...