變量存在的意義:友善管理記憶體。
變量建立的文法:資料類型 變量名=變量的初始值;
int a = 10;
#define 宏常量
通常在檔案上方定義,表示一個常量
#const修飾的變量const 資料類型 變量名 = 常量值;
通常在變量定義前面加關鍵字const,修飾該變量偉常量,不可修改。
差別:define是宏定義,程式在預處理階段将用define定義的内容進行了替換。是以程式運作時,常量表中并沒有用define定義的常量,系統不為它配置設定記憶體。const定義的常量,在程式運作時在常量表中,系統為它配置設定記憶體。
C++ 關鍵字
辨別符命名規則
作用:C++規定給辨別符(變量,常量)命名時,有自己的規則。
1、辨別符不能是關鍵字
2、辨別符隻能由字母、數字、下劃線組成
3、第一個字元必須偉字母或下劃線
4、辨別符中字母區分大小寫
#資料類型
存在的意義:給變量配置設定一個合适的記憶體空間。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SYyQTOlRmM3ETY5UDNwY2Y1EDMiVGZyUWN5cTOxIjZm9CX5EzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.png)
sizeof關鍵字
//可以利用sizeof求出資料類型占用的記憶體大小
//文法:sizeof(資料類型、變量)
實型
預設輸出一個小數,隻會輸出六個有效數字
float f2 = 3e2;
cout << f2<<endl; 300
float f3 = 3e-2;
cout << f3; 0.3
1、單精度
2、雙精度
字元型
C/C++字元變量隻存一個位元組。
字元型變量并不是把字元本身存到記憶體中,而是存的ascii值。
轉義字元
\加參數
字元串型
C語言風格字元串
char 變量名[] = “字元串的值";
C++語言風格字元串
String 變量名=”字元串值“;
布爾類型
true=1;
false=0;
隻占用1個位元組。
bool隻要是非0都為真。
三目運算符。
建立三個變量abc
将a和b做比較,将變量打的值指派給C。
int a = 10;
int b = 20;
int c = 30;
c=(a > b ? a : b);
switch語句
缺點:判斷時候隻能是整形或字元型,不可以是一個區間。
優點:結構清晰,執行效率高。
一維數組建立
//數組類型 數組名[數組長度];
//數組類型 數組名[數組長度] = { 值1,值2,值3 };
//數組類型 數組名[] = { 值1,值2,值3 };
一維數組名稱的用途:
1、可以統計整個數組在記憶體中的長度
2、可以擷取數組中記憶體的首位址
cout << (int)&arr[0] << endl;
//将位址轉為10進制
二維數組定義方式:
資料類型 數組名[行數][列數];
資料類型 數組名[行數][列數]={{資料1,資料2},{資料3,資料4}}
資料類型 數組名[行數][列數]={資料1,資料2,資料3,資料4};
資料類型 數組名[][列數]={資料1,資料2,資料3,資料4}
二維數組數組名
1、檢視二維數組所占記憶體空間
2、擷取二維數組的首位址
int arr[2][3] = { 1,2,3,4,5,6 };
cout << sizeof(arr)<<endl;
cout << arr << endl;
cout << sizeof(arr[0]) << endl;//一行所占的記憶體大小。
cout << arr[0][0] << endl;
函數
函數的聲明
提前告訴編譯器函數的存在,可以利用函數的聲明。
函數的分檔案編寫
作用:讓代碼結構更加清晰
1、建立字尾名為.h的頭檔案
2、建立字尾名為.cpp的源檔案
3、在頭檔案寫函數的聲明
4、在源檔案中寫函數的定義
指針
空指針和野指針
空指針:指針變量隻想記憶體中編号為0的空間
用途:初始化指針變量
注意:空指針隻想的記憶體是不可通路的。
C++核心程式設計部分
1、記憶體分區模型
C++程式在執行的時候,将記憶體大方向劃分為4個區域
運作的時候。
1、代碼區:存放函數體的二進制代碼,由作業系統管理的
2、全局區:存放靜态變量和全局變量
3、棧區:由編譯器自動配置設定釋放,存放函數的參數值,局部變量等。(隻要是局部都是棧區)
4、堆區:由程式員配置設定和釋放,若程式員不釋放,程式結束時由作業系統回收。
意義:不同的區域存放的資料,賦予不同的生命周期,更靈活的程式設計。
在程式編譯後,未執行以前分成兩個區域
代碼區:
存放CPU執行的機器指令
代碼區是共享的,共享的目的是對于頻繁被執行的程式,隻需要在記憶體中有一份代碼即可。
代碼區是隻讀的,使其隻讀的原因是防止程式意外地修改它的指令。
全局區:
全局變量和靜态變量存放的區域
全局區還包含了常量區,字元串常量和其他常量存放在此
該區域的資料在程式結束後作業系統釋放。
總結:
C++在運作之前,編譯後,分為全局區和代碼區
代碼區的特點是共享和隻讀
全局區中存放全局變量、靜态變量、常量
常量區存放const修飾的全局變量 和字元串常量。
不要傳回局部變量的位址
int* func() {//形參資料也放在棧區
int a = 10;
return &a;
}
int main() {
int* p = func();
cout << *p << endl;//第一次可以列印是因為,編譯器做了保留
cout << *p << endl;//第二次資料不再保留了。
system("pause");
return 0;
堆區:
由程式員配置設定釋放,若程式員不是放,程式結束的時候由作業系統回收
在C++中主要利用new在堆區開辟記憶體
指針本質也是局部變量,放在棧上,但是指針儲存的資料是存放在堆區。
#include <iostream>
using namespace std;
int* func() {
int* a = new int(10);
return a;
cout << *p << endl;// 在堆區開辟的資料
cout << *p << endl;//
new操作符
C++利用new操作符在堆區開辟資料
堆區開辟的資料,由程式員手動開辟,手動釋放,釋放利用操作符delete
文法:new 資料類型
利用new建立的資料,會傳回該資料對應的類型的指針。
delete操作符
堆區的資料 由程式員管理開辟 程式員管理釋放
如果想釋放堆區的資料,利用關鍵字 delete釋放
int *p=new int(10);
delete p;
在堆區利用new開辟數組
建立10整形資料的數組,在堆區
int *arr=new int[10];//10代表數組有10個元素。
釋放數組的時候
delete[] arr;
引用
文法:資料類型 &别名=原名
int &b=a;
b=20;
cout<<a<<endl;// a為20
//int &c;//錯誤,引用必須初始化
int &c = a;//一旦初始化以後,就不可以更改
c = b;//這是指派操作,不是更改引用
cout << " a = " << a << endl;
cout << " b = " << b << endl;
cout << " c = " << c << endl;
}
1、引用必須要初始化
2、引用一旦初始化後,就不可以更改。
通路權限
三種
公共權限 成員類内可以通路 類外可以通路
保護權限 成員類内可以通路 類外不可以通路 差別:繼承中。兒子可以通路父親中的保護内容。
私有權限 成員類内可以通路 類外不可以通路 差別:兒子不能通路父親的内容。兒子不可以通路父親的私有内容。
struct和class差別:
struct預設權限為公共
class預設權限為私有
成員屬性設定為私有
優點1:将所有成員屬性設定為私有,可以自己控制讀寫權限
優點2:對于寫權限,我們可以檢測資料的有效性
void setName(string name){
if(name=="")
return;