new的使用

????????上次堆區的介紹中,我們提到了一個關鍵字new,那今天我們就詳細講講它

? ? ? ? 今天我們主要將兩個內容

? ? ? ? 1.new的基本語法

? ? ? ? 2.用new創建數組

1.new的基本語法

? ? ? ? new,可以在堆區中創建空間,來存放數據,就比如像下面這樣

int* p = new int(29);//new會返回空間的地址,所以要用相同類型的指針變量接收

????????基本上用new創建變量的格式:指針類型+指針變量名=new+變量類型+(賦值)?

????????那我們已經知道了怎么創建,現在我們再來講講釋放就像fopen打開的文件要用,fcolse來關閉,malloc,calloc,realloc動態分配的空間,要用free來釋放一樣,new在堆區中創建的空間也需要delete來刪除(釋放)

delete p;//釋放new在堆區創建的變量

????????我們可以先用new來創建空間,在釋放的前后打印看一下,會有什么效果:

#include<iostream>
using namespace std;
//new的基本語法
int* asd()
{//在堆區開辟空間int* p = new int(29);//new會返回空間的地址,所以要用相同類型的指針變量接收return p;
}void fff()
{int* p = asd();cout << *p << endl;cout << *p << endl;cout << *p << endl;cout << *p << endl;delete p;//釋放new在堆區創建的變量//cout << *p << endl;}int main()
{fff();return 0;
}

????????在釋放前:

?

????????????????我們可以看到,很成功的打印出來了并沒有亂碼出現 ,那接下來我們在看看釋放后的打印結果:

????????我們可以看到,釋放前的打印完了之后,就無法打印了,并出現了訪問權限沖突的問題,這證明了new所創建的空間成功被釋放了。

2.用new創建數組

????????而用new創建一個數組,其實也是異曲同工之妙,只不過細節上有點區別

?? ?int* arr = new int[10];//注意:與創建單個變量不同,它賦值時使用的并不是小括號,而是中括號?

????????用new創建一個數組的基本公式可以概括為:?指針類型+指針數組名=new+變量類型+[元素個數]

????????注意:與創建單個變量不同,它賦值時使用的并不是小括號,而是中括號?

????????那么釋放呢?

?? ?delete[] arr;//new在堆區中創建的數組與變量釋放的格式是不一樣的,數組比變量要多一個中括號。

????????這里呢,它多了一個中括號,表示它是在釋放一個數組。?

????????接下來,我們在上面的代碼的基礎上,創建一個數組,同樣在釋放前后打印,看看結果是不是一樣的。

#include<iostream>
using namespace std;
//new的基本語法
int* asd()
{//在堆區開辟空間int* p = new int(29);//new會返回空間的地址,所以要用相同類型的指針變量接收return p;
}void fff()
{int* p = asd();cout << *p << endl;cout << *p << endl;cout << *p << endl;cout << *p << endl;delete p;//釋放new在堆區創建的變量//cout << *p << endl;}//運用new在堆區創建數組void fds()
{int* arr = new int[10];//注意與創建單個變量不同,它賦值時使用的并不是小括號,而是中括號//為數組賦值for (int i = 0; i < 10; i++){arr[i] = i + 100;//將arr當作數組名加個中括號就可以了,正常結果就是100-109了}//我們來看看賦值是否成功呢?for (int j = 0; j < 10; j++){cout << arr[j] << endl;}delete[] arr;//new在堆區中創建的數組與變量釋放的格式是不一樣的,數組比變量要多一個中括號。/*for (int j = 0; j < 10; j++){cout << arr[j] << endl;}*/
}int main()
{fff();fds();return 0;
}

????????釋放前:

????????釋放后:

?

????????同樣的話我就不再這里水字數了?,希望大家有所收獲


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

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

相關文章

使用python實現自動化拉取壓縮包并處理流程

使用python實現自動化拉取壓縮包并處理流程 實現成果展示使用說明 實現成果展示 使用說明 執行./run.sh 腳本中的內容主要功能是&#xff1a; 1、從遠程服務器上下拉制定時間更新的數據 2、將數據中的zip拷貝到指定文件夾內 3、解壓后刪除所有除了lcm之外的文件 4、新建一個ou…

香橙派打包qt文件報錯“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案

PyQt 報錯總結&#xff1a;打包文件過程&#xff0c;“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案全解析 在使用 PyQt5 搭建圖形界面時&#xff0c;打包文件的過程中出現的問題&#xff0c;真難繃&#xff0c;搞了半天。 Qt 平臺插件 xcb 無法加載QOb…

Missashe考研日記-day29

Missashe考研日記-day29 1 專業課408 學習時間&#xff1a;3h學習內容&#xff1a; 今天先是把虛擬存儲剩余的課聽完了&#xff0c;然后就是做課后選擇題&#xff0c;57道&#xff0c;已經接受了OS課后題尤其多的事實了。解決并且理解完習題之后就開始預習文件管理的內容&…

【Linux】第十二章 安裝和更新軟件包

目錄 1. 什么是RPM&#xff1f; 2. dnf是什么&#xff0c;它和rpm有什么聯系和區別&#xff1f; 3. RHEL 中如何做才能啟用對第三方存儲庫的支持&#xff1f; 4. 怎么理解RHEL9中的應用流(Application Streams)和模塊(Modules)&#xff1f; 5. RHEL9 有兩個必要的軟件存儲…

新時代下的存儲過程開發實踐與優化

隨著現代應用系統的復雜度不斷增加&#xff0c;數據庫作為核心的數據存儲和處理引擎&#xff0c;其性能和可靠性顯得尤為重要。存儲過程&#xff08;Stored Procedure&#xff09;作為一種封裝在數據庫中的應用邏輯&#xff0c;使得開發者能夠在數據庫層面實現數據操作、數據校…

從梯度消失到百層網絡:ResNet 是如何改變深度學習成為經典的?

自AlexNet贏得2012年ImageNet競賽以來&#xff0c;每個新的獲勝架構通常都會增加更多層數以降低錯誤率。一段時間內&#xff0c;增加層數確實有效&#xff0c;但隨著網絡深度的增加&#xff0c;深度學習中一個常見的問題——梯度消失或梯度爆炸開始出現。 梯度消失問題會導致梯…

JVM——引入

什么是JVM&#xff1f;它與JDK、JRE的關系&#xff1f; JVM、JRE 和 JDK 是 Java 平臺的三個核心組件&#xff0c;各自承擔著不同的職責&#xff0c;它們之間的關系密不可分。理解它們的區別和聯系有助于更好地開發、部署和運行 Java 應用程序。對于 Java 開發者來說&#xff…

PyCharm 2023升級2024 版本

windows下把老版本卸載之后&#xff0c;需要把環境變量&#xff0c;注冊表信息刪除。 并且把C:\Users\用戶\AppData 文件夾下的 Local\JetBrains和Roaming\JetBrains 都刪除&#xff0c;再重新安裝 原舊項目升級的方式&#xff1a; 1.2023虛擬機的文件夾是venv 改為.venv…

從外賣大戰看O2O新趨勢:上門私廚平臺系統架構設計解析

京東高調進軍外賣市場&#xff0c;美團全力防守&#xff0c;兩大巨頭的競爭讓整個行業風起云涌。但在這場外賣大戰之外&#xff0c;一個更具潛力的細分市場正在悄然興起——上門私廚服務。 與標準化外賣不同&#xff0c;上門私廚提供的是個性化定制服務。廚師帶著新鮮食材上門現…

驅動開發系列53 - 一個OpenGL應用程序是如何調用到驅動廠商GL庫的

一:概述 一個 OpenGL 應用程序調用 GPU 驅動的過程,主要是通過動態鏈接庫(libGL.so)來完成的。本文從上到下梳理一下整個調用鏈,包含 GLVND、Mesa 或廠商驅動之間的關系。 二:調用關系 1. 首先一個 OpenGL 應用程序(比如游戲或圖形渲染軟件)在運行時會調用 OpenGL 提供…

springboot3 聲明式 HTTP 接口

1 介紹 在 Spring 6 和 Spring Boot 3 中&#xff0c;我們可以使用 Java 接口來定義聲明式的遠程 HTTP 服務。這種方法受到 Feign 等流行 HTTP 客戶端庫的啟發&#xff0c;與在 Spring Data 中定義 Repository 的方法類似。 聲明式 HTTP 接口包括用于 HTTP exchange 的注解方法…

多級緩存架構設計與實踐經驗

多級緩存架構設計與實踐經驗 在互聯網大廠Java求職者的面試中&#xff0c;經常會被問到關于多級緩存的架構設計和實踐經驗。本文通過一個故事場景來展示這些問題的實際解決方案。 第一輪提問 面試官&#xff1a;馬架構&#xff0c;歡迎來到我們公司的面試現場。請問您對多級…

Mac「brew」快速安裝Redis

安裝Redis 步驟 1&#xff1a;安裝 Redis 打開終端&#xff08;Terminal&#xff09;。 運行以下命令安裝 Redis&#xff1a; brew install redis步驟 2&#xff1a;啟動 Redis 安裝完成后&#xff0c;可以使用以下命令啟動 Redis 服務&#xff1a; brew services start redis…

文獻閱讀(一)植物應對干旱的生理學反應 | The physiology of plant responses to drought

分享一篇Science上的綜述文章&#xff0c;主要探討了植物應對干旱的生理機制&#xff0c;強調通過調控激素信號提升植物耐旱性、保障糧食安全的重要性。 摘要 干旱每年致使農作物產量的損失&#xff0c;比所有病原體造成損失的總和還要多。為適應土壤中的濕度梯度變化&#x…

if consteval

if consteval 是 C23 引入的新特性&#xff0c;該特性是關于immediate function 的&#xff0c;即consteval function。用于在編譯時檢查當前是否處于 立即函數上下文&#xff08;即常量求值環境&#xff09;&#xff0c;并根據結果選擇執行不同的代碼路徑。它是對 std::is_con…

MANIPTRANS:通過殘差學習實現高效的靈巧雙手操作遷移

25年3月來自北京通用 AI 國家重點實驗室、清華大學和北大的論文“ManipTrans: Efficient Dexterous Bimanual Manipulation Transfer via Residual Learning”。 人手在交互中起著核心作用&#xff0c;推動著靈巧機器人操作研究的不斷深入。數據驅動的具身智能算法需要精確、大…

Field訪問對象int字段,對象訪問int字段,通過openjdk17 C++源碼看對象字段訪問原理

在Java反射機制中&#xff0c;訪問對象的int類型字段值&#xff08;如field.getInt(object)&#xff09;的底層實現涉及JVM對內存偏移量的計算與直接內存訪問。本文通過分析OpenJDK 17源碼&#xff0c;揭示這一過程的核心實現邏輯。 一、字段偏移量計算 1. Java層初始化偏移量…

Java查詢數據庫表信息導出Word

參考: POI生成Word多級標題格式_poi設置word標題-CSDN博客 1.概述 使用jdbc查詢數據庫把表信息導出為word文檔, 導出為word時需要下載word模板文件。 已實現數據庫: KingbaseES, 實現代碼: 點擊跳轉 2.效果圖 2.1.生成word內容 所有數據庫合并 數據庫不合并 2.2.生成文件…

Qt中的全局函數講解集合(全)

在頭文件<QtGlobal>中包含了Qt的全局函數&#xff0c;現在就這些全局函數一一詳解。 1.qAbs 原型&#xff1a; template <typename T> T qAbs(const T &t)一個用于計算絕對值的函數。它可以用于計算各種數值類型的絕對值&#xff0c;包括整數、浮點數等 示…

AI與IT協同的典型案例

簡介 本篇代碼示例展示了IT從業者如何與AI協同工作&#xff0c;發揮各自優勢。這些案例均來自2025年的最新企業實踐&#xff0c;涵蓋了不同IT崗位的應用場景。 一、GitHub Copilot生成代碼框架 開發工程師AI協作示例&#xff1a;利用GitHub Copilot生成代碼框架&#xff0c;…