網站首頁 編程語言 正文
存儲方案和動態分配
在之前的文章當中,我們討論了C++用來為變量分配內存的5種方案,但是這些方案并不適用于使用new
運算符分配的內存,這種內存被稱為動態內存。
我們在之前的文章當中也曾介紹過,動態內存由new
和delete
控制,而不是由作用域和鏈接性規則控制。所以我們可以在一個函數當中分配動態內存,在另外一個函數中釋放。
通常C++編譯器當中有三塊獨立的內存,一塊用于靜態變量,一塊用于自動變量,還有一塊用于動態存儲。
雖然存儲方案的概念不適用于動態內存,但是適用于動態內存的自動和靜態指針。C++ Primer
當中有這么一個例子,我們在一個函數當中有如下語句:
float * p_fees = new float[20];
很明顯,我們通過new
創建了一個長度為20的float
數組,這塊數組的內存將會一直停留在內存當中,直到使用delete
語句釋放。但當該函數運行結束的時候,p_fees
這個指針將會消失。如果希望在其他地方能夠使用這個數組,需要將地址通過某種方式返回或者傳遞。
如果我們將p_fees
的鏈接性聲明為外部的,那么我們在其他地方都可以訪問到了,如果另外的文件當中需要訪問,也同樣可以使用關鍵字extern
。
初始化
前面講了使用new
申請內存的方法,如果我們想要在分配內存的同時完成變量的初始化,應該怎么辦呢?
如果要為內置的標量類型分配空間并初始化,可以在類型名后面加上初始值,并將它用括號括起來:
int *pi = new int(3); double *pd = new double(99.9);
如果我們要初始化結構體或者是數組,則需要使用大括號的列表初始化,這需要編譯器支持C++11,這是C++11中的新特性:
struct P { int x, y; }; P *p = new P{3, 4}; int *arr = new int[4] {2, 3, 4, 5};
在C++11當中也支持對單值變量使用列表初始化:
double *pd = new double(99.99);
- 上一篇:C語言版約瑟夫問題算法實現_C 語言
- 下一篇:C++名稱空間介紹_C 語言
相關推薦
- 2022-10-06 SQL語句中的ON?DUPLICATE?KEY?UPDATE使用_MsSql
- 2022-09-14 jquery實現計算器小功能_jquery
- 2022-03-27 C語言中scanf與scnaf_s函數詳解_C 語言
- 2022-01-22 Redis學習之旅--與SpringBoot的結合
- 2022-04-12 無法加載文件 ,因為在此系統中禁止執行腳本。
- 2022-10-29 前端rem適配如何具體去使用
- 2023-02-03 VSCode中ESLint插件修復以及配置教程_相關技巧
- 2021-12-02 使用gin框架搭建簡易服務的實現方法_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支