1 C++初識 1.1 變數 作用:給一段指定的記憶體空間起名,方便操作這段記憶體 **註意:**C++在創建變數時,必須給變數一個初始值,否則會報錯 1.2 常量 作用:用於記錄程式中不可更改的數據 C++定義常量兩種方式 #define 巨集常量: #define 常量名 常量值 通常在文件上方定義, ...
1 C++初識
1.1 變數
作用:給一段指定的記憶體空間起名,方便操作這段記憶體
註意:C++在創建變數時,必須給變數一個初始值,否則會報錯
1.2 常量
作用:用於記錄程式中不可更改的數據
C++定義常量兩種方式
- #define 巨集常量: #define 常量名 常量值
通常在文件上方定義,表示一個常量 - const修飾的變數:const 數據類型 常量名 = 常量值
通常在變數定義前加關鍵字const,修飾該變數為常量,不可修改
1.3 關鍵字
作用:關鍵字是C++中預先保留的單詞(標識符),在定義變數或者常量時候,不要用關鍵字
1.4 變數、常量命名規則
- 標識符不能是關鍵字
- 標識符只能由字母、數字、下劃線組成
- 第一個字元必須為字母或下劃線
- 標識符中字母區分大小寫
2 數據類型
2.1 整型
short(短整型) 2位元組
int (整型) 4位元組
long(長整形) Windows為4位元組,Linux為4位元組(32位),8位元組(64位) (-2^31 ~ 2^31-1)
2.2 浮點型
單精度float 4位元組
雙精度double 8位元組
2.3 字元型
作用:字元型變數用於顯示單個字元
char ch = 'a';
- C和C++中字元型變數只占用1個位元組。
- 字元型變數並不是把字元本身放到記憶體中存儲,而是將對應的ASCII編碼放入到存儲單元
2.4 字元串
作用:用於表示一串字元
#include<string>
string 變數名 = "字元串值"
2.5 布爾 bool
作用:布爾數據類型代表真或假的值
2.6 sizeof
作用:利用sizeof關鍵字可以統計數據類型所占記憶體大小
2.7 數據輸入cin
作用:用於從鍵盤獲取數據
語法: cin >> 變數
3 運算符
3.1 算術運算符
+正號
-負號
+加
-減
*乘
/ 除
% 取模(取餘)
++ 前置遞增
++ 後置遞增
-- 前置遞減
-- 後置遞減
3.2 賦值運算符
=
+=
-=
*=
/=
%=
3.3 比較運算符
==
!=
<
>
<=
>=
3.4 邏輯運算符
!
&&
||
4 流程式控制制語句
4.1 選擇結構
4.1.1 if
-
單行格式if語句:
if(條件){ 條件滿足執行的語句 }
-
多行格式if語句:
if(條件){ 條件滿足執行的語句 }else{ 條件不滿足執行的語句 };
-
多條件的if語句:
if(條件1){ 條件1滿足執行的語句 }else if(條件2){條件2滿足執行的語句}... else{都不滿足執行的語句}
4.1.2 三目運算符
作用: 通過三目運算符實現簡單的判斷
語法: 表達式1 ? 表達式2 :表達式3
4.1.3 switch
switch(表達式)
{
case 結果1:執行語句;break;
case 結果2:執行語句;break;
...
default:執行語句;break;
}
4.2 迴圈結構
4.2.1 while迴圈語句
作用:滿足迴圈條件,執行迴圈語句
語法: while(迴圈條件){ 迴圈語句 }
4.2.2 do...while迴圈語句
作用: 滿足迴圈條件,執行迴圈語句
語法: do{ 迴圈語句 } while(迴圈條件);
註意:與while的區別在於do...while會先執行一次迴圈語句,再判斷迴圈條件
4.2.3 for迴圈語句
作用: 滿足迴圈條件,執行迴圈語句
語法: for(起始表達式;條件表達式;末尾迴圈體) { 迴圈語句; }
4.3 跳轉語句
4.3.1 break語句
作用: 用於跳出選擇結構或者迴圈結構
break使用的時機:
- 出現在switch條件語句中,作用是終止case並跳出switch
- 出現在迴圈語句中,作用是跳出當前的迴圈語句
- 出現在嵌套迴圈中,跳出最近的內層迴圈語句
4.3.2 continue語句
作用:在迴圈語句中,跳過本次迴圈中餘下尚未執行的語句,繼續執行下一次迴圈
5 數組
5.1 概述
所謂數組,就是一個集合,裡面存放了相同類型的數據元素
特點1:數組中的每個數據元素都是相同的數據類型
特點2:數組是由連續的記憶體位置組成的
5.2 一維數組
5.2.1 一維數組定義方式
一維數組定義的三種方式:
數據類型 數組名[ 數組長度 ];
數據類型 數組名[ 數組長度 ] = { 值1,值2 ...};
數據類型 數組名[ ] = { 值1,值2 ...};
5.2.2 一維數組數組名
一維數組名稱的用途:
- 可以統計整個數組在記憶體中的長度
sizeof(arr)
- 可以獲取數組在記憶體中的首地址
(int)arr
5.3 二維數組
二維數組就是在一維數組上,多加一個維度。
5.3.1 二維數組定義方式
二維數組定義的四種方式:
數據類型 數組名[ 行數 ][ 列數 ];
數據類型 數組名[ 行數 ][ 列數 ] = { {數據1,數據2 } ,{數據3,數據4 } };
數據類型 數組名[ 行數 ][ 列數 ] = { 數據1,數據2,數據3,數據4};
數據類型 數組名[ ][ 列數 ] = { 數據1,數據2,數據3,數據4};
5.3.2 二維數組數組名
- 查看二維數組所占記憶體空間
sizeof(arr)
- 獲取二維數組首地址
arr
6 函數
6.1 概述
作用:將一段經常使用的代碼封裝起來,減少重覆代碼
6.2 函數的定義
返回值類型 函數名 (參數列表)
{
函數體語句
return表達式
}
6.3 函數的調用
功能:使用定義好的函數
語法: 函數名(參數)
6.4 值傳遞
- 所謂值傳遞,就是函數調用時實參將數值傳入給形參
- 值傳遞時,並不會影響實參
7 指針
7.1 指針的基本概念
指針的作用: 可以通過指針間接訪問記憶體
7.2 指針變數的定義和使用
指針變數定義語法: 數據類型 * 變數名;
int * p;
p = &a;
//通過*操作指針變數指向的記憶體
*p = a;
- 普通變數存放的是數據,指針變數存放的是地址
- 指針變數可以通過" * "操作符,操作指針變數指向的記憶體空間,這個過程稱為解引用
7.3 指針所占記憶體空間
int a = 10;
int * p;
p = &a;
sizeof(p);
所有指針類型在32位操作系統下是4個位元組
7.4 空指針和野指針
空指針:指針變數指向記憶體中編號為0的空間
野指針:指針變數指向非法的記憶體空間
7.5 const修飾指針
const修飾指針有三種情況
-
const修飾指針 --- 常量指針
//const修飾的是指針,指針指向可以改,指針指向的值不可以更改 const int * p1 = &a; p1 = &b; //正確 //*p1 = 100; 報錯
-
const修飾常量 --- 指針常量
/const修飾的是常量,指針指向不可以改,指針指向的值可以更改 int * const p2 = &a; //p2 = &b; //錯誤 *p2 = 100; //正確
-
const即修飾指針,又修飾常量
7.6 指針和函數
作用:利用指針作函數參數,可以修改實參的值
//值傳遞
void swap1(int a ,int b)
{
int temp = a;
a = b;
b = temp;
}
//地址傳遞
void swap2(int * p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a = 10;
int b = 20;
swap1(a, b); // 值傳遞不會改變實參
swap2(&a, &b); //地址傳遞會改變實參
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0;
}
8 結構體
8.1 結構體基本概念
結構體屬於用戶自定義的數據類型,允許用戶存儲不同的數據類型
8.2 結構體定義和使用
語法: struct 結構體名 { 結構體成員列表 };
//結構體定義
struct student
{
//成員列表
string name; //姓名
int age; //年齡
int score; //分數
};
8.3 結構體數組
作用:將自定義的結構體放入到數組中方便維護
語法: struct 結構體名 數組名[元素個數] = { {} , {} , ... {} }
8.4 結構體指針
作用:通過指針訪問結構體中的成員
利用操作符 -> 可以通過結構體指針訪問結構體屬性
//結構體定義
struct student
{
//成員列表
string name; //姓名
int age; //年齡
int score; //分數
};
int main() {
struct student stu = { "張三",18,100, };
struct student * p = &stu;
p->score = 80; //指針通過 -> 操作符可以訪問成員
cout << "姓名:" << p->name << " 年齡:" << p->age << " 分數:" << p->score <<endl;
system("pause");
return 0;
}