1. 程式人生 > >C++中關於[]靜態陣列和new分配的動態陣列的區別分析

C++中關於[]靜態陣列和new分配的動態陣列的區別分析

五、通過函式返回一個數組的問題
   函式宣告的靜態陣列不可能通過函式返回,因為生存期的問題,函式呼叫完其內部變數佔用的記憶體就被釋放了。如果想通過函式返回一個數組,可以在函式中用new動態建立該陣列,然後返回其首地址。
其原因可以這樣理解,因為[]靜態陣列是在棧中申請的,而函式中的區域性變數也是在棧中的,而new動態陣列是在堆中的分配的,所以函式返回後,棧中的東西被自動釋放,而堆中的東西如果沒有delete不會自動釋放

相關推薦

C++關於[]靜態陣列new分配動態陣列區別分析

五、通過函式返回一個數組的問題    函式宣告的靜態陣列不可能通過函式返回,因為生存期的問題,函式呼叫完其內部變數佔用的記憶體就被釋放了。如果想通過函式返回一個數組,可以在函式中用new動態建立該陣列,然後返回其首地址。 其原因可以這樣理解,因為[]靜態陣列是在棧中申請的,而函式中的區域性變數也是在棧中的,而

c++靜態動態庫的建立與連結

2、動態庫      在使用動態庫的時候,往往提供兩個檔案:一個引入庫(.lib)和一個DLL(.dll)檔案。雖然引入庫的字尾也是.lib ,但是動態庫的引入庫檔案和靜態庫檔案有著本質的區別,對一個DLL來說,其引入庫檔案(.lib)包含DLL匯出的函式和變數的符號名,而.dll檔案包含該DLL實際的函式

C#的overridnew修飾符區別(代碼)

之間 using stat ide post 不同的 虛擬 spa 代碼 在C#的繼承中嘗嘗會用到相關的修飾詞:override和new。這兩個修飾符都可以在新的子類中,重寫同名的父類方法。 override: 擴展或修改繼承的方法、屬性、索引器或事件的抽象或虛擬

C#靜態變數 靜態方法

C#中靜態變數和 靜態方法 static節省了構造物件時造成的效能損耗,其次還能用於一些特殊環境(如惡漢式單例) 但是由於靜態成員在程式載入之前就進入記憶體,直到程式結束才會銷燬,所以 在程式中如果大量使用static來宣告型別或成員,也會造成系統資源的浪費。 一般靜態的就代表全域性。表示任何類

C++malloc/freenew/delete的區別---補充(15)《Effective C++》

1、C++中既然有了new/delete為什麼還有還存在malloc/free呢? 1)malloc/free作為C/C++語言中的庫函式,而new/delete是C++中的運算子而已,因此C++編譯器可以強制使new/delete運算子進行建構函式和解構函式

c++*p=ap=&a的區別

#include <iostream> using namespace std; int main() {     int a = 10;     int *PA = new int;     

C++定義一個物件new一個物件的區別與聯絡

由於對C++的使用時斷斷續續的,所以今天拿起來看了,C++中一個最大的特色就是有了類的設計思想 基本後面的所有包括封裝,多型,繼承等都是基於類的思想完成的。 類到物件的過程就是例項化的過程,我經常會看到兩種方式,一種是這樣的: class A{ 。。。 } void ma

C++ 宣告一個變數 New 一個空間的區別

C++ 中宣告一個變數,這個變數具有一定的作用域和生命週期。 作用域:    就是一個變數被引用的範圍。 生命週期:這個變數可以被引用的時間段,不同生命週期的變數,在程式記憶體中的分佈位置不同,一個程式記憶體分為:程式碼區、全域性資料區、堆區、棧區,不同的記憶體區域對應不同

C++傳統列舉強型別列舉的區別

傳統列舉型別定義舉例: enum Animal  //列舉型別名字 {        monkey, //列舉中的元素值        horse,        lion,        eleph

C++ 臨時物件 const 物件 的一個區別

C++ 中臨時物件和const物件的一個區別 const 物件特點 1,只能作為右值 2,只能呼叫物件的const方法 臨時物件特點 1,只有作為為 const& 賦值

C++關於[]靜態數組new分配動態數組的區別分析

zid dad ima lin aer uem asa iba ash %E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E8%99%9A%E6%8B%9F%E6%9C%BA7---%E7%BA%BF%E7%A8%8B%E5%AE%89%E5

C++靜態初始化陣列動態初始化陣列

靜態初始化的陣列的長度必須是在程式中確定的常數,不能是由使用者輸入的變數例子:int a[10];//正確Student stud[10];//正確:Student是一個學生類int n;cin>>n;int a[n];//錯誤int n;cin>>n

c++向上轉型向下轉型,動態轉換,靜態轉換詳解

子類轉換為父類:向上轉型,使用dynamic_cast<type_id>(expression),這種轉換相對來說比較安全不會有資料的丟失; 父類轉換為子類:向下轉型,可以使用強制轉換,這

wpf靜態資源動態資源的區別

一次 div font size res static 靜態 mil source 靜態資源(StaticResource)指的是在程序載入內存時對資源的一次性使用,之後就不再訪問這個資源了。 動態資源(DynamicResource)指的是在程序運行過程中然會去訪問資源。

Java陣列記憶體分配

理解陣列 概念:陣列是儲存同一種資料型別多個元素的集合。也可以看成是一個容器。 陣列既可以儲存基本資料型別,也可以儲存引用資料型別,只要所有的陣列元素具有相同的資料型別即可 定義陣列的方法: ①:type[] arrayName;(推薦使用這種方式) ②:ty

面試題5——C的mallocC++new有什麼區別

malloc和new有以下區別: (1)new,delete是操作符,只能在C++中使用; (2)malloc,free是函式,可以覆蓋,C,C++中都可以使用; (3)new可以呼叫物件的建構函式,對應的delete呼叫相應的解構函式; (4)malloc僅僅分配記憶體,free僅僅回收記

C++靜態成員變數靜態成員函式的用法

昨天在修改專案函式功能時,在其中一個類中添加了一個靜態成員變數和兩個靜態成員函式,結果在連結時出現一個非常典型的錯誤:“The following symbols referenced in processor “p0” could not be resolve

C++stringl型別陣列型別的

字元陣列轉化成string型別 char ch [] = “ABCDEFG”; string str(ch);//也可string str = ch; 或者 char ch [] = “ABCDEFG”

c++靜態函式與動態函式的區別

在C語言中,由於沒有類的概念,所以沒有靜態成員一說,在c中static的作用主要有2個: 一是隱藏功能,對於static修飾的函式和全域性變數而言二是保持永續性功能,對於static修飾的區域性變數而言。並且,因為存放在靜態區,全域性和區域性的static修飾的變數,都預設

C#的棧堆、值型別與引用型別、值引數、引用引數、輸出引數、引數陣列

程式執行時,資料必須儲存在記憶體中,一個數據需要多大的記憶體、儲存的位置、如何儲存依賴於該資料的資料型別。執行中的程式使用兩個記憶體區域來儲存資料:棧和堆。 棧:                 棧是一