C++常見知識點總結

常見字符

?*

  1. 注釋:/* 這是一個注釋*/
  2. 乘法:a * b
  3. 取值運算符:*指針變量,int a = 4,*a ?????
  4. 指針變量:數據類型 *變量名, int *no = &bh,代表了no是一個指針
  5. 數據類型:int*:整型指針類型、char* 字符指針類型,char* c=(char *) &b。int no=38,int* ptr=&no, &no和ptr是一個東西,no和*ptr是一個東西。
  6. 間接值/解除引用/解引用運算符:

注:int *no 和 int* no什么區別

?1. 實際上沒有區別
?2. int* a, b; 這里 a 是指向 int 的指針,而 b 只是一個普通的 int 整數變量。
?3. int *a, *b; 這樣的聲明清晰地表明 a 和 b 都是指向 int 的指針。

::

  1. 變量屬于哪個域:std::count<<"no"
  2. 當局部變量和全局變量名稱相同時,會屏蔽全局變量使用局部變量,如果想使用全局變量,使用::,:: a。

常見關鍵詞?

typedef

數據類型的別名

static(靜態)

靜態局部變量

  1. ?主要作用:會影響變量的存儲期和作用域。
  2. 只會被初始化一次
  3. 靜態局部變量:static修飾的局部變量生命周期和程序相同。即在函數調用結束后不會被銷毀,而是保持其值直到下次調用。
  4. 靜態類成員:用 static 聲明的類成員屬于整個類,而不是類的各個實例。

const(常量)

  1. 主要作用:增強程序的安全性
  2. 初始化之后,值不能被修改
  3. 當 const 修飾類的成員函數時,表示該函數不會修改類的任何成員變量

指針

  1. ?常量指針:const 數據類型 *變量名;不能通過解引用的方法修改內存地址中的值(用原始的變量名是可以修改的)。
    1. Int a=3,b=4;

      const int* p=&a; #報錯

      *p = 13; p=&b; #不報錯

  2. 指針常量
    1. 數據類型 * const 變量名;
    2. 指向的變量(對象)不可改變。
    3. 在定義的同時必須初始化,否則沒有意義。
    4. 可以通過解引用的方法修改內存地址中的值。
    5. Int a=3,b=4;

      const int* p=&a; #不報錯

      *p = 13; p=&b; #報錯

    6. 新名字:引用

  3. 常指針常量

    1. const 數據類型 * const 變量名;

    2. 指向的變量(對象)不可改變,不能通過解引用的方法修改內存地址中的值。

    3. 新名字:常引用。?

    4. 常量指針:指針指向可以改,指針指向的值不可以更改。

      指針常量:指針指向不可以改,指針指向的值可以更改。

      常指針常量:指針指向不可以改,指針指向的值不可以更改。

      記憶秘訣:*表示指針,指針在前先讀指針;指針在前指針就不允許改變。

      常量指針:const 數據類型 *變量名

      指針常量:數據類型 * const 變量名

?void

  1. 函數的返回值用void,表示函數沒有返回值。
  2. 函數的參數填void,表示函數不需要參數(或者讓參數列表空著)。
  3. 函數的形參用void *,表示接受任意數據類型的指針。
  4. 注意:
    1. 不能用void聲明變量,它不能代表一個真實的變量,但是,用void *可以。
    2. 不能對void *指針直接解引用(需要轉換成其它類型的指針)。
    3. 把其它類型的指針賦值給void*指針不需要轉換。
    4. 把void *指針賦值給把其它類型的指針需要轉換。

內存

內存分為內核空間和用戶空間,內核空間由操作系統管理,與程序員沒什么關系。我們寫的程序運行在用戶空間。一個c++源程序編譯成可執行程序后,二進制文件的大小是固定的,最多幾十兆。

程序運行時,內存主要分成四個區,分別是棧、堆、數據段和代碼段。

棧:存儲局部變量函數參數和返回值。不管計算機的內存是8G還是16G,分配給棧的只有幾兆。修改系統參數可以調整棧的大小。

堆:存儲動態開辟內存的變量。內存越大,分配的內存就越大。

n數據段:存儲全局變量和靜態變量。

代碼段:存儲可執行程序的代碼和常量(例如字符常量),此存儲區不可修改

棧和堆的主要區別:

1)管理方式不同:棧是系統自動管理的,在出作用域時,將自動被釋放;堆需手動釋放,若程序中不釋放,程序結束時由操作系統回收。

2)空間大小不同:堆內存的大小受限于物理內存空間;而棧就小得可憐,一般只有8M(可以修改系統參數)。

3)分配方式不同:堆是動態分配;棧有靜態分配和動態分配(都是自動釋放)。

4)分配效率不同:棧是系統提供的數據結構,計算機在底層提供了對棧的支持,進棧和出棧有專門的指令,效率比較高;堆是由C++函數庫提供的。

棧的效率非常高,堆是用鏈表來管理的,效率會低一點。

5)是否產生碎片:對于棧來說,進棧和出棧都有著嚴格的順序(先進后出),不會產生碎片;而堆頻繁的分配和釋放,會造成內存空間的不連續,容易產生碎片,太多的碎片會導致性能的下降。

6)增長方向不同:棧向下增長,以降序分配內存地址;堆向上增長,以升序分配內存地址。

動態分配內存new

????????申請內存的語法:new 數據類型(初始值); // C++11支持{}

????????如果動態分配的內存不用了,必須用delete釋放它,否則有可能用盡系統的內存。

for (int ii = 1; ii > 0; ii++){int* p = new int[100000];     // 一次申請100000個整數。cout << "ii="<<ii<<",p=" << p << endl;}

內存會螺旋式越來越大,(一會大一會小,是因為系統有交換區)

靜態分配內存

空指針

  1. 用0或NULL都可以表示空指針。int* p=0,表示還沒有指向任何地址。
  2. 如果對空指針使用delete運算符,系統將忽略該操作,不會出現異常
  3. 用0和NULL表示空指針會產生歧義,C++11建議用nullptr表示空指針,也就是(void *)0。

野指針

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

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

相關文章

SAP揭秘者-怎么執行生產訂單ATP檢查及其注意點

文章摘要&#xff1a; 上篇文章給大家介紹生產訂單ATP檢查的相關后臺配置&#xff0c;大家可以按照配置步驟去進行配置&#xff0c;配置完之后&#xff0c;我們接下來就是要執行ATP檢查。本篇文章具體給大家介紹怎么來執行生產 訂單ATP檢查及其注意點。 執行生產訂單ATP檢查的…

Qt for android 獲取USB設備列表(二)JNI方式 獲取

簡介 基于上篇 [Qt for android 獲取USB設備列表&#xff08;一&#xff09;Java方式 獲取]&#xff0c; 這篇就純粹多了&#xff0c; 直接將上篇代碼轉換成JNI方式即可。即所有的設備連接與上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850) 關鍵代碼…

Android卡頓丟幀低內存與adb shell內存狀態

Android卡頓丟幀低內存與adb shell內存狀態 卡頓丟幀除了CPU/GPU層面&#xff0c;另外&#xff0c;也需要特別注意整機低內存情況。kswapd0 是一個內核工作線程&#xff0c;內存不足時會被喚醒&#xff0c;做內存回收工作。 當內存頻繁在低水位的時候&#xff0c;kswapd0 會被頻…

webgl three 項目常用操作

分組 const group1 new THREE.Group(); //所有高層樓的父對象group1.name "高層";for (let i 0; i < 5; i) {const geometry new THREE.BoxGeometry(20, 60, 10);const material new THREE.MeshLambertMaterial({color: 0x00ffff});const mesh new THREE.Me…

Linux基礎(六):Linux 系統上 C 程序的編譯與調試

本篇博客詳細分析&#xff0c;Linux平臺上C程序的編譯過程與調試方法&#xff0c;這也是我們后續程序開發的基礎。 目錄 一、第一個hello world程序 1.1 創建.c文件 1.2 編譯鏈接 運行可執行程序 二、編譯鏈接過程 2.1 預編譯階段 2.2 編譯階段 2.3 匯編階段 2.4 鏈…

一千題,No.0025(Chess For Three)

描述 Three friends gathered to play a few games of chess together. In every game, two of them play against each other. The winner gets 2 points while the loser gets 0, and in case of a draw, both players get 1 point each. Note that the same pair of playe…

【MySQL精通之路】SQL語句(3)-鎖和事務語句

目錄 1.START TRANSACTION、COMMIT和ROLLBACK語句 2.無法回滾的語句 3.導致隱含COMMIT的語句 4.SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT語句 5.LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語句 6.LOCK TABLE和UNLOCK TABLES語句 6.1 表鎖獲取 6.2 表鎖釋放…

qemu+gdb調試linux內核

打開CONFIG_DEBUG_INFO,編譯內核 通過圖形菜單配置該宏,執行make menuconfig。 kernel hacking —> compile-time checks and compiler options —> compile the kernel with debug info 驗證是否打開成功,grep -nr “CONFIG_DEBUG_INFO” .config。 打開成功,然后…

plsql 學習

過程化編程語言 賦值&#xff1a;&#xff1a; ||&#xff1a;連接符號 dbms_output.put_line() :輸出的語句 var_name ACCOUNTLIBRARY.USERNAME%type; 變量名&#xff1b;某個表的數據類型&#xff1b;賦值給變量名 用下面的方法更好用 異常exception 循…

力扣HOT100 - 75. 顏色分類

解題思路&#xff1a; 單指針&#xff0c;對數組進行兩次遍歷。 class Solution {public void sortColors(int[] nums) {int p 0;int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {int tmp nums[i];nums[i] nums[p];nums[p] tmp;p;}}for (int i p; i …

java庫和包的概念

在Java中&#xff0c;"庫"和"包"是兩個不同的概念&#xff0c;但它們之間存在著密切的關聯。 庫&#xff08;Library&#xff09; 定義&#xff1a;庫是一組已經編寫好的代碼和資源&#xff0c;用于解決特定的問題或提供特定的功能。它可以包含一個或多個…

【前端每日基礎】day19——回調函數

回調函數 回調函數是一種常見的編程概念&#xff0c;它是指在函數執行完畢后&#xff0c;將另一個函數作為參數傳遞給它&#xff0c;以便在特定條件滿足時調用這個函數。回調函數通常用于處理異步操作、事件處理、定時器等場景&#xff0c;以實現非阻塞式的程序設計。 特點和…

存儲+調優:存儲-IP-SAN-EXTENSION

存儲調優&#xff1a;存儲-IP-SAN-EXTENSION 文件系統的鎖標記 GFS&#xff08;鎖表空間&#xff09; ----------- ------------ ------------- 節點 | ndoe1 | | node2 | | node3 | ---------- ------…

斷更是我的錯

打算在暑假每天兩個文章&#xff0c;大概是6月20多號開始吧。

vue3中watch語法

在Vue 3中&#xff0c;watch仍然是一個用于觀察和響應Vue實例上的數據變化的選項。watch選項接受一個對象&#xff0c;該對象中的屬性對應要觀察的數據屬性&#xff0c;并指定對應的回調函數&#xff0c;用于處理數據變化時的邏輯。 watch選項的語法如下&#xff1a; watch: …

GNSS中的多路徑效應原理及計算方法

1 多路徑效應原理 圖1 多路徑效應原理圖 2 計算方法 如需原文&#xff0c;可加多源融合定位與智能控制討論群獲取,QQ群號&#xff1a;51885949

ORACLE 6節點組成的ACFS文件系統異常的分析思路

近期遇到多次6節點集群的ACFS文件系統環境異常問題&#xff1b;如24日中午12點附近出現ACFS文件系統訪問異常&#xff0c;通過查看集群ALERT日志、CSSD進程日志及OSW監控軟件的日志&#xff0c;可以發現OSW監控軟件在11:55-12:40分時沒有收集到虛擬機LINUX主機的監控數據&#…

【OceanBase診斷調優】—— 直連普通租戶時遇到報錯:Tenant not in this server

本文介紹了直連 OceanBase 數據庫中的普通租戶時&#xff0c;出現報錯&#xff1a;ERROR 5150 (HY000) : Tenant not in this server 的處理方法。 問題描述 在 n-n 或者 n-n-n (n>1) 的部署架構中&#xff0c;使用 2881 端口 直連 OceanBase 集群的普通租戶&#xff0c;可…

ChatGPT大語言模型發展歷史

技術背景與OpenAI成立 2010年代初&#xff1a;隨著深度學習技術的突破&#xff0c;特別是循環神經網絡(RNN)和長短時記憶網絡(LSTM)的成功應用&#xff0c;自然語言處理(NLP)領域開始經歷一場革命。2015年12月&#xff1a;OpenAI作為一個旨在確保人工智能(AI)研究造福全人類的…

Java并行流

Java并行流 什么是并行流&#xff1f;并行流的優缺點優點缺點 如何使用&#xff1f;1.創建流2.轉換為并行流3.流操作4.收集結果5.關閉流 并行流的本質1.任務劃分和調度2.并發處理數據3.任務結果合并4.性能優化 參考文獻官方文檔 什么是并行流&#xff1f; 并行流&#xff08;p…