C++入門

来源:https://www.cnblogs.com/tanyuyang/archive/2023/03/21/17242019.html
-Advertisement-
Play Games

1 C++初識 1.1 變數 作用:給一段指定的記憶體空間起名,方便操作這段記憶體 **註意:**C++在創建變數時,必須給變數一個初始值,否則會報錯 1.2 常量 作用:用於記錄程式中不可更改的數據 C++定義常量兩種方式 #define 巨集常量: #define 常量名 常量值 通常在文件上方定義, ...


1 C++初識

1.1 變數

作用:給一段指定的記憶體空間起名,方便操作這段記憶體

註意:C++在創建變數時,必須給變數一個初始值,否則會報錯

1.2 常量

作用:用於記錄程式中不可更改的數據

C++定義常量兩種方式

  1. #define 巨集常量: #define 常量名 常量值
    通常在文件上方定義,表示一個常量
  2. 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

  1. 單行格式if語句: if(條件){ 條件滿足執行的語句 }

  2. 多行格式if語句: if(條件){ 條件滿足執行的語句 }else{ 條件不滿足執行的語句 };

  3. 多條件的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 ...};
  3. 數據類型 數組名[ ] = { 值1,值2 ...};

5.2.2 一維數組數組名

一維數組名稱的用途:

  1. 可以統計整個數組在記憶體中的長度sizeof(arr)
  2. 可以獲取數組在記憶體中的首地址(int)arr

5.3 二維數組

二維數組就是在一維數組上,多加一個維度。

5.3.1 二維數組定義方式

二維數組定義的四種方式:

  1. 數據類型 數組名[ 行數 ][ 列數 ];
  2. 數據類型 數組名[ 行數 ][ 列數 ] = { {數據1,數據2 } ,{數據3,數據4 } };
  3. 數據類型 數組名[ 行數 ][ 列數 ] = { 數據1,數據2,數據3,數據4};
  4. 數據類型 數組名[ ][ 列數 ] = { 數據1,數據2,數據3,數據4};

5.3.2 二維數組數組名

  1. 查看二維數組所占記憶體空間sizeof(arr)
  2. 獲取二維數組首地址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修飾指針有三種情況

  1. const修飾指針 --- 常量指針

        //const修飾的是指針,指針指向可以改,指針指向的值不可以更改
        const int * p1 = &a;
        p1 = &b; //正確
        //*p1 = 100; 報錯
    
  2. const修飾常量 --- 指針常量

        /const修飾的是常量,指針指向不可以改,指針指向的值可以更改
        int * const p2 = &a;
        //p2 = &b; //錯誤
        *p2 = 100; //正確
    
  3. 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;
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (1)使用vue-cli創建: ## 安裝或者升級 npm install -g @vue/cli ## 保證 vue cli 版本在 4.5.0 以上 vue --version ## 創建項目 vue create my-project 然後的步驟: Please pick a preset - ...
  • 本文將介紹一個角向漸變的一個非常有意思的小技巧! 我們嘗試使用 CSS 繪製如下圖形: 在之前,類似的圖案,其實我們有嘗試過,在 單標簽實現複雜的棋盤佈局 一文中,我們用單標簽實現了這樣一個棋盤佈局: 那麼,本文有什麼特殊之處呢?讓我們一探究竟。 快速實現網格佈局 首先,上述的佈局還是希望使用一個標 ...
  • 橋接模式(Bridge Pattern)是一種結構型設計模式,用於將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構,從而能夠更好地組合和擴展這些類。 在前端開發中,橋接模式通常用於處理 UI 組件的複雜性,將組件的抽象與實現分離,使得它們能夠獨立地變化。通過橋接模式,我們可以讓組件的 ...
  • 概述 KCP協議結合了TCP和UDP協議的特點,是一個快速可靠的協議。 引述官方介紹: KCP是一個快速可靠協議,能以比 TCP浪費10%-20%的帶寬的代價,換取平均延遲降低 30%-40%,且最大延遲降低三倍的傳輸效果。純演算法實現,並不負責底層協議(如UDP)的收發,需要使用者自己定義下層數據的 ...
  • TCP/IP協議中有兩個具有代表性的傳輸層協議,分別是TCP協議和UDP協議。TCP協議全稱傳輸控制協議,是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。UDP協議全稱用戶數據報協議,是 TCP/IP協議模型傳輸層的無連接協議,它既不建立連接,也不檢查目標電腦是否已準備好接收,該協議只是將數... ...
  • 複習 Vue 1.vue的使用步驟: (1)導入vue.js (2)創建除body以外最大的div標簽,給定id值 (3)創建vue對象 new Vue({ "el":"#app", "data":{}, //定義變數 "methods":{}, //定義方法 "beforeCreate":func ...
  • Mybatis 環境: JDK1.8 Mysql maven IDEA 回顧: JDBC Mysql Java基礎 Maven Junit SSM框架:配置文件的。最好的方式:看官網文檔; 1、簡介 1.1、什麼是Mybatis MyBatis 是一款優秀的持久層框架 它支持自定義 SQL、存儲過程 ...
  • 攔截器&文件上傳 1.攔截器-Interceptor 1.1攔截器概念 攔截器 攔截器(Interceptor):是一種動態攔截方法調用的機制,在SpringMVC中動態攔截控制器方法的執行。在SpringBoot中,攔截器是開發的常用手段,要用來登錄驗證、性能檢查、日誌記錄等 (1)SpringB ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...