CPP第四版第四章:创建动态数组
數組類型的變量有三個重要限制:
?? ??? ?數組長度固定不變
?? ??? ?在編譯時必須知道其長度
?? ??? ?數組只在定義它的塊語句內存在
?? ?每一個程序在執行時都占用一塊可用的內存空間,用于存放動態分配的對象,此內存空間稱為程序的自由存儲區或堆,C語言程序使用一對標準庫函數malloc和free在自由存儲區中分配存儲空間,而C++語言則使用new和delete表達式實現相同的功能。
?? ?
?? ?動態數組的定義
?? ??? ?數組變量通過指定類型、數組名和維數來定義。而動態分配數組時,只需指定類型和數組長度,不必為數組對象命名,new表達式返回指向新分配數組的第一個元素指針
?? ??? ??? ?int *pia = new int[10];
?? ??? ??? ?此new表達式分配了一個含有10個int型元素的數組,并返回指向該數組第一個元素的指針,此返回值初始化了指針pia。
?? ??? ??? ?new表達式需要指定指針類型以及在廣播號中給出的數組維數,該維數可以是任意表達式,創建數組后,new將返回指向數組第一個元素的指針。在自由存儲區中的數組對象是沒有名字的,程序員只能通過其它地址間接地訪問堆中的對象。
?? ?
?? ?初始化動態分配的數組
?? ??? ?動態分配數組時,如果數組元素具有類類型,將使用該類的默認構造函數實現初始化,如果數組元素是內置類型,則無初始化
?? ??? ??? ?string *psa = new string[10];
?? ??? ??? ?int *pia = new int[10];
?? ??? ??? ?這兩個new表達式都分配了含有10個對象的數組。
?? ??? ?也可使用跟在數組長度后面的一對空圓括號,對數組元素做初始化:
?? ??? ??? ?int *pia2 = new int[10]();
?? ??? ?圓括號要求編譯器對數組做值初始化
?? ??? ?
?? ?對于動態分配的數組,其元素只能初始化為元素類型的默認值,而不能像數組變量一樣,用初始化列表元素提供各不相同的初值。
?? ?
?? ?const對象的動態數組
?? ??? ?如果我們在自由存儲區中創建的數組存儲了內置類型的const對象,則必須為這個數組提供初始化:因為數組元素都是const對象,無法賦值。實現這個要求的唯一方法是對數組做值初始化“
?? ??? ??? ?const int *pic = new const int[100]();
?? ??? ??? ?const int *pic2 = new const int[100]; //這種做法是錯誤的,因為沒有初始化復制
?? ??? ?C++允許定義類類型的const數組,但該類類型必須提供默認構造函數:
?? ??? ??? ?const string *pcs = new const string[100];
?? ??? ??? ?在這里,將使用string類的默認構造函數初始化數組元素。
?? ??? ??? ?當然,已創建的常量元素不允許修改,因此這樣的數組實際上用處不大。。
?? ??? ??? ?
?? ?允許動態分配空數組:
?? ??? ?C++雖然不允許定義長度為0的數組變量,但明確指出,調用new動態創建長度為0的數組是合法的
?? ??? ??? ?char arr[0]; //錯誤
?? ??? ??? ?char *cp = new char[10]; //正確
?? ??? ?用new動態創建長度為0的數組時,new返回有效的非零指針。該指針與new返回的其它指針不同,不能進行解引用操作,因為它畢竟沒有指向任何元素。而允許的操作包括:比較運行,因此該指針在循環中使用:在該指針上加(減)0,或都減去本身,得0值。
?? ?
?? ?動態空間的釋放
?? ??? ?動態分配的內存最后必須進行釋放。否則,內存最終將會逐漸耗盡。如果不再需要使用動態創建的數組,程序員必須顯式地將其占用的存儲空間返還給程序的自由存儲區,C++語言為指針提供delete []表達事釋放指針所指向的數組空間:
?? ??? ??? ?delete [] ipc;
?? ??? ??? ?該語句回收了pic所指向的數組,把相應的內存返還給自由存儲區。在關鍵字delete和指針之間的空方括號對是必不可少的:它告訴編譯器該指針指向的是自由存儲區中的數組,而并非單個對象
?? ??? ??? ?如果遺漏了空方括號對,這是一個編譯器無法發現的錯誤,將導致程序在運行時出錯。
?? ??? ??? ?
習題 編寫程序由從標準輸入設備讀入的元素據建立一個int型vector對象,然后動態創建一個與該vector對象大小一致的數組,把vector對象的所有元素復制給新數組。
?
轉載于:https://www.cnblogs.com/drink-coffee/archive/2013/04/27/3048210.html
總結
以上是生活随笔為你收集整理的CPP第四版第四章:创建动态数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 DocFetcher 全文搜索
- 下一篇: MVPArms框架学习遇到的一个问题——