動態儲存分配問題 在C 程式設計中

2021-09-22 10:44:12 字數 1310 閱讀 6639

操作符 new

c++ 操作符 new 可以用來動態儲存分配,該操作符返回 乙個指向所分配空間的指標。 例如, 給乙個整數分配儲存空間,可以使用下面的語句。

int *y;

當需要使用該整數時,可以使用如下語法來分配儲存空間:

y = new int;

操作符new 分配了一塊能儲存乙個整數的空間, 並將指向該空間的指標返回給y, y 是對整數指標的引用,而*y則是對整數本身的引用。為了在剛分配的空間中儲存乙個整數值, 比如 20,可以使用如下語法:

*y =20;

三步以整合,可以寫作:

int *y =  new int(20);

一維陣列:

為了在執行時建立乙個一維浮點陣列x, 首先必須把x說明成乙個指向float的指標,然後為陣列分配足夠的空間。例如, 乙個大小為n的一維浮點陣列可以按如下方式來建立:

float *x=new float [n];

操作符new分配n個浮點數所需要的空間,並返回指向第乙個浮點數的指標。可以使用如下語法來訪問每個陣列元素:x[0],x[1],x[n-1] 等。

異常處理

在執行語句

float *x = new float [n];

時,計算機有時會出現不能分配足夠的空間,這是會報異常 (exception). 可以採用try-catch 結構來捕獲 new 引發的異常:

# include

# include

float *x

trycatch(xalloc)

操作符 delete

動態分配的儲存空間不再需要時應該被釋放,所釋放的空間可重新用來動態的建立新的結構。下面的語句是用來釋放分配給*y的空間以及一維陣列x:

delete y;

delete x;

二維陣列

c++中的二維陣列的動態分配問題是乙個『不太容易的事情『。二維陣列的儲存結構是下圖這個樣子。

先寫**吧,隨後補圖,哈哈哈!

templatebool make2darray(t **&x, int rows, int cols)

{ try{

//建立行指標

x = new t *[rows];

// 為每一行分配空間

C語言動態儲存分配

在陣列一章中,曾介紹過陣列的長度是預先定義好的,在整個程式中固定不變。c語言中不允許動態陣列型別。例如 int n scanf d n int a n 用變數表示長度,想對陣列的大小作動態說明,這是錯誤的。但是在實際的程式設計中,往往會發生這種情況,即所需的記憶體空間取決於實際輸入的資料,而無法預先...

c 學習之動態儲存空間分配

無法在編譯時分配空間,只能在程式執行時分配空間。new 用於分配空間,它的返回值是乙個指標,指向所分配的空間 delete 用於釋放空間 對整數進行動態空間分配 1.宣告乙個整形指標 int y 2.為這個整數動態分配儲存空間 操作符new分配了一塊能夠儲存乙個整數的空間,並將該空間的指標賦給y y...

C 動態儲存空間的分配和釋放

使用new申請空間 特點 1 沒有名字,只能通過指標間接訪問它們。2 從堆中申請空間 分類 變數 語法 指標變數 new 型別名 delete 指標變數 舉例 int p p new int delete p 初始化 p 90 p new int 99 一維陣列 語法 指標變數 new 型別名 下標...