日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++二维数组动态申请内存

發布時間:2024/6/21 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++二维数组动态申请内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 好久沒用C++刷題了,今天早上刷了幾條題,感覺很陌生了。怪我,大二下實在太頹廢了,沒啥作為。

? 今天更新個關于c++二維數組內存申請的問題,當初作為菜鳥初學指針的時候,還是在這方面有點搞不通的。今天用到了,順便寫下來,適當時候給C++初學者用用。

-----------C++二維數組動態申請內存--------------

? 如果對new和delete不是很了解的話可以到這里來看看,http://www.cnblogs.com/hazir/p/new_and_delete.html

? 首先,我們一般需要用到數組的時候,都是直接聲明,比如:

1 int array[3][3];

? 但是,在某些情況下,數組的維數我們是不知道的,可能是等待用戶輸入維數,這時候需要用變量來指定維數了。可是,我們不能直接這樣聲明數組,因為C++不允許直接用變量作為維數聲明,必須用常量,像這樣就會報編譯錯誤:

?

? 這時候就需要用new來動態申請數組了。我們一步一步來,申請一維數組的時候,我們可以這樣寫:

int num = 3; int* array = new int[num];

? 這段代碼的意思就是,用new來申請num個int類型的空間,然后返回那段空間的首地址,再賦給array。可見array是一個int類型的指針,指向那段空間的首地址。語法和邏輯無誤,正常運行。

? 但是,申請二維數組的時候,就可能要對指針這一知識點要掌握得比較好一點,理解得比較透徹。先貼代碼,再分析:

??

int num = 3;int** array = new int*[num];for(int i=0; i<num; ++i) {array[i] = new int[num];}

? 看完這段代碼,還是有點糊涂的。為什么array是int**類型?為什么還要用循環來分配空間?我們再來看下面注釋版的代碼:

??

int num = 3;
(
int*)* array = new int*[num]; // 申請int*類型數組的內存空間,賦值給(int*)*類型的arrayfor(int i=0; i<num; ++i) {array[i] = new int[num]; // 分別給int*類型的數組申請空間,即一維數組的動態申請。}

? 現在我來解釋一下,其實我們可以把二維數組理解成為很多一維數組的集合。比如說:int array[4][3],其實它就是由4個長度為3的一維數組組成的。array[0]指的就是第一個一維數組。可以推出,array[0],array[1],array[2], array[3]就是int*類型的指針,用來分別指向一維數組。那么,array又是什么呢?很顯然,array就是(int*)*類型的指針,指向剛才那4個int*指針類型占用空間的首地址。有點繞?看圖:

? 因此,聯系上圖,我們先new4個int*類型,將首地址賦值給array。再用循環每次new4個int類型,首地址指向對應的int*類型的指針。

? 了解之后,我們當然要用delete釋放內存,就不細說了,怎么申請怎么釋放,并且是逆著回來釋放空間,看代碼:

for(int i=0; i<num; i++) {delete[] array[i];}delete[] array;

?

?

好吧!我已經盡量講得很詳細了!其實這段代碼不難,認真思考一下就行了。可是我還是苦口婆心的很仔細的講了,可能為了以后和我一樣的菜鳥剛學指針時有緣看到這篇博客可以對他有些幫助吧,其實我已經對這個爛熟于心了,為什么還要這么仔細得寫呢?會不會浪費時間浪費精力?我不知道,可能再熟悉再小的問題,也可能會有自己不懂的學問在里面吧。總之,每篇博客,盡量寫到最好!

?

停筆!過幾天會更新關于new和delete的知識點!

轉載于:https://www.cnblogs.com/yuanxiaohui-blog/p/4837037.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的C++二维数组动态申请内存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。