C++ 核心基礎:數字、數組、字符串、指針與引用詳解

C++ 核心基礎:數字、數組、字符串、指針與引用詳解

  • 1. C++ 基礎語法
    • 1.1 標識符與保留字
    • 1.2 數據類型概述
    • 1.3 基本輸入輸出
    • 2.1 基本整數類型(int、short、long、long long)
    • 2.2 無符號整數類型(unsigned int、unsigned short、unsigned long、unsigned long long)
    • 2.3 整數類型選擇與應用場景
    • 3.1 單精度浮點數(`float`)
    • 3.2 雙精度浮點數(`double`)
    • 3.3 擴展精度浮點數(`long double`)
    • 4.1 一維數組定義與操作
      • 4.1.1 定義與初始化
      • 4.1.2 訪問與修改元素
      • 4.1.3 數組的大小
      • 4.1.4 應用場景
    • 4.2 多維數組定義與操作
      • 4.2.1 二維數組
      • 4.2.2 訪問與修改元素
      • 4.2.3 數組的大小
      • 4.2.4 應用場景
      • 4.2.5 高維數組
    • 4.3 動態數組與內存管理
      • 4.3.1 動態數組的創建
      • 4.3.2 動態數組的使用
      • 4.3.3 內存管理
      • 4.3.4 應用場景
      • 4.3.5 注意事項
    • 5.1 字符數組與 `std::string`
    • 5.2 字符串操作函數與方法
    • 5.3 字符串處理技巧
    • 6.1 指針基本概念與操作
      • 6.1.1 指針的定義
      • 6.1.2 獲取變量的地址
      • 6.1.3 通過指針訪問變量
      • 6.1.4 指針的初始化
      • 6.1.5 指針的應用
    • 6.2 指針與數組關系
      • 6.2.1 數組名作為指針
      • 6.2.2 指針與數組的遍歷
      • 6.2.3 指針與多維數組
      • 6.2.4 指針與函數參數
      • 6.2.5 指針與動態數組
    • 6.3 指針在函數參數與動態內存中的應用
      • 6.3.1 函數參數傳遞
      • 6.3.2 動態內存分配
      • 6.3.3 注意事項
    • 7.1 引用基本概念與操作
    • 7.2 引用與指針的區別
      • 語法區別
      • 語義區別
      • 使用場景
      • 安全性
    • 7.3 引用在函數參數與返回值中的應用
      • 函數參數傳遞
      • 函數返回值
      • 注意事項

1. C++ 基礎語法

1.1 標識符與保留字

在 C++ 中,標識符用于命名變量、函數、類等。一個有效的標識符必須以字母(A-Z 或 a-z)或下劃線 _ 開頭,后續可以包含字母、數字(0-9)和下劃線。標識符是區分大小寫的,這意味著 Variablevariable 是兩個不同的標識符。例如,int myVariable = 10; 中的 myVariable 是一個合法的標識符。

C++ 中有一些保留字,這些保留字不能用作標識符,因為它們在語言中有特殊的含義。例如,intclassreturn 等都是保留字。使用保留字作為標識符會導致編譯錯誤。C++ 標準中定義了大約 65 個保留字,這些保留字在不同的上下文中有不同的用途,如控制流程(ifelse)、數據類型(intfloat)和函數定義(return)等。

1.2 數據類型概述

C++ 提供了豐富的數據類型,這些數據類型可以分為基本數據類型和復合數據類型。基本數據類型包括整數類型、浮點類型、字符類型和布爾類型,而復合數據類型包括數組、結構體、類等。

  • 整數類型:用于存儲沒有小數部分的數值。C++ 提供了多種整數類型,如 intshortlonglong long,它們的存儲大小和取值范圍各不相同。例如,int 通常占用 4 個字節,取值范圍為 ([-2^{31}, 2^{31}-1],而 long long 占用 8 個字節,取值范圍為 ([-2^{63}, 2^{63}-1]。選擇合適的整數類型可以優化內存使用和程序性能。
  • 浮點類型:用于存儲包含小數部分的數值。C++ 提供了 floatdoublelong double 三種浮點類型,它們的精度和存儲大小不同。float 通常占用 4 個字節,有效數字為 7 位;double 占用 8 個字節,有效數字為 15-16 位;long double 的精度更高,占用字節數根據實現而變化。在科學計算和工程應用中,通常使用 double 類型以獲得更高的精度。
  • 字符類型:用于存儲單個字符,如字母、數字和符號。C++ 中的字符類型是 char,它占用 1 個字節,可以存儲 ASCII 字符集中的字符。例如,char c = 'A'; 定義了一個字符變量 c 并賦值為大寫字母 A。
  • 布爾類型:用于存儲邏輯值,只有兩個可能的值:truefalse。布爾類型在條件判斷和邏輯運算中非常有用。例如,bool isTrue = true; 定義了一個布爾變量 isTrue 并賦值為 true

1.3 基本輸入輸出

C++ 提供了強大的輸入輸出功能,主要通過標準輸入輸出流 cincout 來實現。這些流對象與 C++ 標準庫中的輸入輸出操作符 <<>> 配合使用,可以方便地進行數據的輸入和輸出。

  • 輸出操作:使用 cout<< 操作符可以將數據輸出到標準輸出設備(通常是屏幕)。例如,std::cout << "Hello, World!" << std::endl; 會在屏幕上輸出 “Hello, World!”,并換行。std::endl 是一個特殊的操縱符,用于在輸出后添加一個換行符,并刷新輸出緩沖區。
  • 輸入操作:使用 cin>> 操作符可以從標準輸入設備(通常是鍵盤)讀取數據。例如,int num; std::cin >> num; 會從鍵盤讀取一個整數并存儲到變量 num 中。cin 可以讀取多種類型的數據,包括整數、浮點數和字符。
  • 格式化輸入輸出:C++ 提供了一些操縱符,如 std::setwstd::setprecision 等,用于控制輸入輸出的格式。例如,std::cout << std::setw(10) << num << std::endl; 會將變量 num 的輸出寬度設置為 10 個字符,不足的部分用空格填充。std::setprecision(2) 可以設置浮點數的輸出精度為小數點后兩位。

C++ 的輸入輸出功能不僅簡單易用,而且具有很強的靈活性和可擴展性。通過標準庫中的輸入輸出流和操縱符,可以方便地實現各種復雜的輸入輸出需求。# 2. 整數類型

2.1 基本整數類型(int、short、long、long long)

C++ 中的基本整數類型包括 intshortlonglong long,它們的存儲大小和取值范圍各不相同,適用于不同的應用場景。

  • int:這是最常用的整數類型,通常占用 4 個字節(32 位),取值范圍為 ([-2^{31}, 2^{31}-1],即 ([-2147483648, 2147483647])。它適用于大多數需要整數的場景,如計數器、索引等。例如:
    int age = 25;
    
  • short:短整數類型,通常占用 2 個字節(16 位),取值范圍為 ([-2^{15}, 2^{15}-1],即 ([-32768, 32767])。它適用于需要節省內存的場景,尤其是在處理大量數據時。例如:
    short count = 100;
    
  • long:長整數類型,通常占用 4 個字節(32 位),在 64 位系統中可能為 8 個字節(64 位),取值范圍為 ([-2^{31}, 2^{31}-1] 或 ([-2^{63}, 2^{63}-1])。它用于存儲比 int 更大的整數。例如:
    long distance = 1000000;
    
  • long long:更長的整數類型,占用 8 個字節(64 位),取值范圍為 ([-2^{63}, 2^{63}-1],即 ([-9223372036854775808, 9223372036854775807])。它適合處理非常大的整數,例如在金融計算或大數運算中。例如:
    long long bigNumber = 1234567890123456789;
    

2.2 無符號整數類型(unsigned int、unsigned short、unsigned long、unsigned long long)

無符號整數類型與基本整數類型的主要區別在于它們只能表示非負數,因此其取值范圍是正數和零,且范圍更大。

  • unsigned int:無符號整數類型,通常占用 4 個字節(32 位),取值范圍為 ([0, 2^{32}-1],即 ([0, 4294967295])。它適用于需要表示非負數的場景,如數組索引、計數器等。例如:
    unsigned int index = 1000000000;
    
  • unsigned short:無符號短整數類型,通常占用 2 個字節(16 位),取值范圍為 ([0, 2^{16}-1],即 ([0, 65535])。它適用于需要節省內存且只處理非負數的場景。例如:
    unsigned short port = 8080;
    
  • unsigned long:無符號長整數類型,通常占用 4 個字節(32 位),在 64 位系統中可能為 8 個字節(64 位),取值范圍為 ([0, 2^{32}-1] 或 ([0, 2^{64}-1])。它用于存儲比 unsigned int 更大的非負整數。例如:
    unsigned long fileSize = 4294967295;
    
  • unsigned long long:無符號超長整數類型,占用 8 個字節(64 位),取值范圍為 ([0, 2^{64}-1],即 ([0, 18446744073709551615])。它適合處理非常大的非負整數,例如在大文件處理或高精度計算中。例如:
    unsigned long long bigFileSize = 18446744073709551615;
    

2.3 整數類型選擇與應用場景

選擇合適的整數類型可以優化內存使用和程序性能,同時避免溢出和數據丟失等問題。以下是一些選擇整數類型的建議和常見應用場景:

  • 通用場景:對于大多數需要整數的場景,int 是首選類型。它在大多數平臺上占用 4 個字節,取值范圍足夠大,適用于計數器、索引、循環變量等。
  • 節省內存:當需要處理大量數據且數據范圍較小時,shortunsigned short 是更好的選擇。例如,在嵌入式系統或內存受限的環境中,short 可以節省內存。
  • 大整數處理:當需要處理非常大的整數時,long longunsigned long long 是合適的選擇。例如,在金融計算、大文件處理或高精度數學模型中,long long 可以提供足夠的范圍。
  • 非負數場景:當變量的值總是非負數時,使用無符號整數類型可以提供更大的范圍。例如,數組索引、文件大小、端口號等通常使用無符號整數類型。
  • 跨平臺兼容性:在跨平臺開發中,應避免使用依賴于平臺的整數類型(如 long),而是使用固定寬度的整數類型(如 int32_tint64_t),這些類型在不同平臺上具有相同的大小和范圍。# 3. 浮點類型
    浮點類型用于存儲包含小數部分的數值,C++ 提供了三種主要的浮點類型:floatdoublelong double。它們在存儲大小、精度和適用場景上各有不同。以下將從不同角度對這三種浮點類型進行詳細分析。

3.1 單精度浮點數(float

float 是單精度浮點數類型,通常占用 4 個字節(32 位),其有效數字為 7 位。它適用于對精度要求不高但需要快速計算的場景。

  • 存儲格式float 類型的存儲格式遵循 IEEE 754 標準,分為符號位、指數位和尾數位。其中,符號位占用 1 位,指數位占用 8 位,尾數位占用 23 位。這種格式使得 float 能夠表示非常大或非常小的數值,但精度相對較低。
  • 取值范圍float 的取值范圍大約為 ([-3.4 \times 10^{38}, 3.4 \times 10^{38}]),但其有效數字僅為 7 位,因此在表示較大或較小的數值時,可能會出現精度損失。
  • 應用場景float 適用于對精度要求不高但需要快速計算的場景,例如實時圖形渲染、簡單的物理模擬等。在這些場景中,計算速度比精度更為重要,因此 float 是一個合適的選擇。

3.2 雙精度浮點數(double

double 是雙精度浮點數類型,通常占用 8 個字節(64 位),其有效數字為 15-16 位。它適用于需要更高精度的場景,例如科學計算和工程應用。

  • 存儲格式double 類型的存儲格式同樣遵循 IEEE 754 標準,分為符號位、指數位和尾數位。其中,符號位占用 1 位,指數位占用 11 位,尾數位占用 52 位。這種格式使得 double 能夠表示更大范圍的數值,并且具有更高的精度。
  • 取值范圍double 的取值范圍大約為 ([-1.7 \times 10^{308}, 1.7 \times 10^{308}]),其有效數字為 15-16 位,因此在表示較大或較小的數值時,能夠保持較高的精度。
  • 應用場景double 適用于需要更高精度的場景,例如科學計算、工程應用、金融計算等。在這些場景中,計算結果的精度至關重要,因此 double 是一個更可靠的選擇。例如,在計算復雜的數學模型、進行高精度的數值分析時,double 能夠提供更準確的結果。

3.3 擴展精度浮點數(long double

long double 是擴展精度浮點數類型,其占用的字節數根據實現而變化,通常為 12 或 16 個字節,精度更高。它用于需要極高精度的計算,例如高精度的數學模型。

  • 存儲格式long double 的存儲格式在不同的實現中可能有所不同,但通常遵循 IEEE 754 標準的擴展精度格式。它包含更多的尾數位和指數位,因此能夠表示更大范圍的數值,并且具有更高的精度。
  • 取值范圍long double 的取值范圍和精度取決于具體的實現,但通常比 double 更高。例如,在某些實現中,long double 的取值范圍可以達到 ([-1.7 \times 10^{4932}, 1.7 \times 10^{4932}]),有效數字可以達到 18-19 位。
  • 應用場景long double 適用于需要極高精度的計算場景,例如高精度的數學模型、復雜的物理模擬等。在這些場景中,計算結果的精度要求極高,因此 long double 是一個必要的選擇。然而,由于 long double 的計算速度相對較慢,并且占用更多的內存,因此在實際應用中需要權衡精度和性能之間的關系。

在選擇浮點類型時,需要根據具體的應用場景和精度要求進行權衡。如果對精度要求不高但需要快速計算,可以選擇 float;如果需要更高的精度,可以選擇 double;如果需要極高精度的計算,可以選擇 long double。# 4. 數組
數組是一種基本的數據結構,用于存儲相同類型的多個元素。在 C++ 中,數組的大小在定義時必須確定,且數組的大小在運行時不可變。數組的元素在內存中是連續存儲的,這使得數組在訪問元素時非常高效。

4.1 一維數組定義與操作

一維數組是最簡單的數組形式,它存儲的是一系列相同類型的元素。

4.1.1 定義與初始化

一維數組可以通過指定數組的類型、名稱和大小來定義。例如:

int arr[5]; // 定義一個包含 5 個整數的數組

數組也可以在定義時直接初始化:

int arr[5] = {1, 2, 3, 4, 5}; // 定義并初始化一個包含 5 個整數的數組

如果初始化的元素個數少于數組的大小,剩余的元素將被自動初始化為 0:

int arr[5] = {1, 2}; // 剩余的元素將被初始化為 0

4.1.2 訪問與修改元素

數組的元素可以通過索引訪問和修改。索引從 0 開始,因此第一個元素的索引為 0,最后一個元素的索引為數組大小減 1。例如:

int value = arr[2]; // 獲取數組的第三個元素
arr[2] = 10; // 修改數組的第三個元素

4.1.3 數組的大小

可以使用 sizeof 運算符來獲取數組的大小(以字節為單位),并結合數組元素的大小來計算數組的長度:

int size = sizeof(arr) / sizeof(arr[0]); // 計算數組的長度

4.1.4 應用場景

一維數組常用于存儲和處理一系列數據,例如學生成績、溫度記錄等。它也常用于算法實現中,如排序和搜索算法。

4.2 多維數組定義與操作

多維數組是數組的擴展,它允許在多個維度上存儲數據。最常見的多維數組是二維數組,但也可以定義三維甚至更高維度的數組。

4.2.1 二維數組

二維數組可以看作是一個表格,它有行和列。定義二維數組時需要指定行數和列數。例如:

int matrix[3][4]; // 定義一個 3 行 4 列的二維數組

二維數組也可以在定義時初始化:

int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82587.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82587.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82587.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS運動開發:如何集成百度地圖SDK、運動跟隨與運動公里數記錄

前言 在開發運動類應用時&#xff0c;集成地圖功能以及實時記錄運動軌跡和公里數是核心需求之一。本文將詳細介紹如何在 HarmonyOS 應用中集成百度地圖 SDK&#xff0c;實現運動跟隨以及運動公里數的記錄。 一、集成百度地圖 SDK 1.引入依賴 首先&#xff0c;需要在項目的文…

如何理解k8s中的controller

一、基本概念 在k8s中&#xff0c;Controller&#xff08;控制器&#xff09;是核心組件之一&#xff0c;其負責維護集群狀態并確保集群內的實際狀態與期望狀態一致的一類組件。控制器通過觀察集群的當前狀態并將其與用戶定義的期望狀態進行對比&#xff0c;做出相應的調整來實…

《Go小技巧易錯點100例》第三十二篇

本期分享&#xff1a; 1.sync.Map的原理和使用方式 2.實現有序的Map sync.Map的原理和使用方式 sync.Map的底層結構是通過讀寫分離和無鎖讀設計實現高并發安全&#xff1a; 1&#xff09;雙存儲結構&#xff1a; 包含原子化的 read&#xff08;只讀緩存&#xff0c;無鎖快…

【MySQL】行結構詳解:InnoDb支持格式、如何存儲、頭信息區域、Null列表、變長字段以及與其他格式的對比

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

LabVIEW多通道并行數據存儲系統

在工業自動化監測、航空航天測試、生物醫學信號采集等領域&#xff0c;常常需要對多個傳感器通道的數據進行同步采集&#xff0c;并根據后續分析需求以不同采樣率保存特定通道組合。傳統單線程數據存儲方案難以滿足實時性和資源利用效率的要求&#xff0c;因此設計一個高效的多…

【Linux系列】bash_profile 與 zshrc 的編輯與加載

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

針對Mkdocs部署到Githubpages加速訪問速度的一些心得

加速網站訪問的一些心得 在使用 MkDocs 構建網站時&#xff0c;為了提高訪問速度&#xff0c;我們可以采取以下一些措施&#xff1a; 1. 優化圖片 使用合適的圖片格式&#xff0c;如 WebP、JPEG2000 等&#xff0c;減少圖片文件大小&#xff0c;從而加快加載速度。 可以使用…

Mysql中切割字符串作為in的查詢條件

問題&#xff1a;需要將一個字符串切割成數組作為in的查詢條件&#xff0c;如&#xff1a; select * from table_1 where name in (select slit(names) from table_2 where id 3); names 返回的格式是’name1,name2,name3…,需要將name按照逗號切割作為in的查詢條件&#xff1b…

云計算中的虛擬化:成本節省、可擴展性與災難恢復的完美結合

云計算中虛擬化的 4 大優勢 1. 成本效益 從本質上講&#xff0c;虛擬化最大限度地減少了硬件蔓延。團隊可以將多個虛擬機整合到單個物理主機上&#xff0c;而不是為每個工作負載部署單獨的服務器。這大大減少了前期硬件投資和持續維護。 結果如何&#xff1f;更低的功耗、更低…

Linux : 多線程【線程概念】

Linux &#xff1a; 多線程【線程概念】 &#xff08;一&#xff09;線程概念線程是什么用戶層的線程linux中PID與LWP的關系 (二) 進程地址空間頁表(三) 線程總結線程的優點線程的缺點線程異常線程用途 &#xff08;一&#xff09;線程概念 線程是什么 在一個程序里的一個執行…

IDEA轉戰TREA AI IDE : springboot+maven+vue項目配置

一、trea下載安裝 Trae官方網址&#xff1a; https://www.trae.com.cn/ Trae官方文檔&#xff1a;https://docs.trae.com.cn/docs/what-is-trae?_langzh w3cschool&#xff1a; https://www.w3cschool.cn/traedocs/ai-settings.html 安裝這里省略&#xff0c;正常安裝即可。…

Java--圖書管理系統(簡易版)

目錄 目錄 前言 &#x1f514;1.library包 1.1 Book類 1.2 BookList類 &#x1f514;2.user包 2.1User類(父類) 2.2Admin(管理員) 2.3 NormalUser(普通用戶) &#x1f514;3.Operation包 &#x1f550;3.1 IOperation接口 &#x1f551;3.2ListOperation(查看操作)…

深入淺出:Spring Boot 中 RestTemplate 的完整使用指南

在分布式系統開發中&#xff0c;服務間通信是常見需求。作為 Spring 框架的重要組件&#xff0c;RestTemplate 為開發者提供了簡潔優雅的 HTTP 客戶端解決方案。本文將從零開始講解 RestTemplate 的核心用法&#xff0c;并附贈真實地圖 API 對接案例。 一、環境準備 在 Spring…

大數據處理利器:Hadoop 入門指南

一、Hadoop 是什么&#xff1f;—— 分布式計算的基石 在大數據時代&#xff0c;處理海量數據需要強大的技術支撐&#xff0c;Hadoop 應運而生。Apache Hadoop 是一個開源的分布式計算框架&#xff0c;致力于為大規模數據集提供可靠、可擴展的分布式處理能力。其核心設計理念是…

685SJBH計量管理系統

摘 要 計量&#xff0c;在我國已有五千年的歷史。計量的發展與社會進步聯系在一起&#xff0c;它是人類文明的重要組成部分。它的發展經歷了古典階段、經典階段和現代階段。而企業的計量管理是對測量數據、測量過程和測量設備的管理。 本系統通過分析現有計量系統的業務邏輯…

從0到1構建前端監控系統:錯誤捕獲、性能采集、用戶體驗全鏈路追蹤實戰指南SDK實現

目錄 前言為什么要做前端監控前端監控目標穩定性用戶體驗業務 前端監控流程常見埋點方案代碼埋點可視化埋點無痕埋點 創建項目第一步、創建monitor文件&#xff0c;cmd進入文件進行npm init -y 項目初始化第二步、創建src/index.js和src/index.html文件第三步、創建webpack.con…

前端瀏覽器判斷設備類型的方法

前端瀏覽器判斷設備類型的方法 在前端開發中&#xff0c;判斷設備類型&#xff08;如手機、平板、桌面電腦&#xff09;有多種方法&#xff0c;以下是常用的幾種方式&#xff1a; 1. 使用 User Agent 檢測 通過 navigator.userAgent 獲取用戶代理字符串進行判斷&#xff1a;…

MNIST 手寫數字分類

轉自我的個人博客: https://shar-pen.github.io/2025/05/04/torch-distributed-series/1.MNIST/ 基礎的單卡訓練 本筆記本演示了訓練一個卷積神經網絡&#xff08;CNN&#xff09;來對 MNIST 數據集中的手寫數字進行分類的過程。工作流程包括&#xff1a; 數據準備&#xff…

數據庫中的 Segment、Extent、Page、Row 詳解

在關系型數據庫的底層存儲架構中&#xff0c;數據并不是隨意寫入磁盤&#xff0c;而是按照一定的結構分層管理的。理解這些存儲單位對于優化數據庫性能、理解 SQL 執行過程以及排查性能問題都具有重要意義。 我將從宏觀到微觀&#xff0c;依次介紹數據庫存儲中的四個核心概念&…