c中new的用法C中new的用法

2021-03-07 01:27:20 字數 4330 閱讀 6116

1樓:老表有點呈

c++中new運算子用於動態分配和撤銷記憶體的運算子。

1、開闢單變數地址空間

new int;  //開闢一個存放陣列的儲存空間,返回一個指向該儲存空間的地址.int *a = new int 即為將一個int型別的地址賦值給整型指標a. 2)int *a = new int(5) 作用同上,但是同時將整數賦值為5。

2、開闢陣列空間

要訪問new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行訪問。用new可以動態開闢,撤銷地址空間。在程式設計序時,若用完一個變數,下次需要再用,可以在每次開始使用時開闢一個空間,在用完後撤銷它。

2樓:手機使用者

new int;//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址(即指標)

new int(100);//開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址

new char[10];//開闢一個存放字元陣列(包括10個元素)的空間,返回首元素的地址

new int[5][4];//開闢一個存放二維整型陣列(大小為5*4)的空間,返回首元素的地址

float *p=new float (3.14159);//開闢一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指標變數p

new運算子使用的一般格式為   new 型別 [初值]   用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。

delete運算子使用的一般格式為   delete [ ] 指標變數

例如要撤銷上面用new開闢的存放單精度數的空間(上面第5個例子),應該用   delete p;

前面用「new char[10];」開闢的字元陣列空間,如果把new返回的指標賦給了指標變數pt,則應該用以下形式的delete運算子撤銷該空間:

delete pt;//在指標變數前面加一對方括號,表示是對陣列空間的操作

例 開闢空間以存放一個結構體變數。

#include

#include

using namespace std;

struct student //宣告結構體型別student

;int main( )

執行結果為   wang fun 10123 m

3樓:幸運夕夕

c++中new的用法有三種,具體如下:

一、new operator,也叫new表示式;new表示式比較常見,也最常用,例如:

上面這個new表示式完成了兩件事情:申請記憶體和初始化物件。

二、operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如:

注意: 這裡多了一個operator。這是new的第二個用法,也算比較常見吧。

三、placement new,它用於在給定的記憶體中初始化物件,也就是說你手中已有一塊閒置的記憶體,例如:

那麼現在buffer是你所擁有閒置記憶體的指標buffer = new(buffer) string("abc"); //呼叫了placement new,在buffer所指向的記憶體中初始化string型別的物件,初始值是"abc",事實上,placement new也是new表示式的一種,但是比普通的new表示式多了一個引數,當然完成的操作和返回值也不同。

因此上面new的第一種用法可以分解兩個 動作,分別為後面的兩種用法。

注意:1、使用者是無法主動呼叫建構函式的,所以需要藉助placement new,但是使用者可以主動呼叫解構函式,所以用完這些物件後,呼叫解構函式,然後用對應分配記憶體的方法去釋放記憶體。

2、事實上malloc並不一定比operatornew節省多少時間,用placement new常常是為了考慮效能,所以會配合記憶體池一起使用。

4樓:匿名使用者

new的功能是動態分配記憶體。

語法就是 new 型別名t(初值列表)

5樓:

new 的作用是動態開闢空間,一般的形式估計你也會了。我就直接給你講題吧

你這個函式的作用是動態建立一個(n1+1)*(n2+1)的二維陣列(注:在c++中 直接用new(a)這種形式是錯誤的)

首先明白所謂指標就是存放地址的變數,這一點最重要double **a=new double*[n1+1];

這句話的意思是開闢以一塊連續的空間用來儲存指標變數(指標的指標),它的大小是n1+1。*a是指標,那麼**a就是存放指標的指標。那個new後的double* 相當於一個強制轉換。

因為用new時和陣列的名字無關所以[n1+1]前的陣列名可以省略。這個類比於new double[3];

for(i=0;i<=n1;i++)

這個語句就是給把指標付給指標的指標,看下邊的圖你就明白了;

多琢磨一下!

6樓:有界函式

推薦你看一下effictive c++,這裡面有單獨的一節是講 new 的。細緻的講不了,可以自己去看看。

關於c++中new語句的使用方法~~

7樓:匿名使用者

3: int *p=new int [10];

004010e8 6a 28 push 28h//記憶體

的大小10*4

004010ea e8 21 00 00 00 call operator new (00401110)

004010ef 83 c4 04 add esp,4

00401110 55 push ebp

00401111 8b ec mov ebp,esp

00401113 51 push ecx

00401114 6a 01 push 1//_nh_malloc引數2

00401116 8b 45 08 mov eax,dword ptr [cb]

00401119 50 push eax//_nh_malloc引數1

0040111a e8 e1 3b 00 00 call _nh_malloc (00404d00)//呼叫_nh_malloc申請記憶體

0040111f 83 c4 08 add esp,8

00401122 89 45 fc mov dword ptr [res],eax//把_nh_malloc的返回值給[res]

00401125 8b 45 fc mov eax,dword ptr [res]//返回申請記憶體的指標

00401128 8b e5 mov esp,ebp

0040112a 5d pop ebp

0040112b c3 ret//返回

呼叫過程可以看成這樣:

new[4*10]->_nh_malloc(40, 1)->返回申請的指標

res這個是vc6.0反彙編後給出的變數名,其實它是一個區域性變數

push ecx //這句就是申請res的記憶體的 相當sub esp, 4

00401122 89 45 fc mov dword ptr [res],eax//把_nh_malloc的返回值給[res]

00401125 8b 45 fc mov eax,dword ptr [res]//返回申請記憶體的指標

為什麼會產生產生上面的2句**?

因為這個是除錯模式的編譯,**沒有優化,所以才會產生這樣的問題

等於 >

8樓:匿名使用者

可以的,new int[5] 和new int [5]沒有區別的! 這個不是屬於語法的東西,屬於個人程式設計習慣和格式,看個人的習慣吧!

9樓:

寫程式就是要不斷嘗試,試一試就清楚了,別嫌麻煩

10樓:匿名使用者

double typename = new double

C 中的new函式怎麼用,C 中new的用法

1.new的作用是從自由儲存為 類 的物件或物件陣列分配記憶體,並將已適當分類的非零指標返回到物件。比如 char pchar new char 10 delete pchar 例子中動態分配了10個char型別的記憶體給了pchar,來構成一個陣列。需要注意的是,分配陣列採用 如果只是單個的只要n...

C 用new建立類物件問題,C 怎麼用new建立類物件?

myclass a new myclass 這句話的意思是建立一個myclass型別的指標a,並生成一個myclass物件,使指標a指向這個物件。這個物件是匿名物件沒有名字。該物件沒有名字,但可以解指 針使用該物件,或者用引用 myclass b a 那麼b 和 a 表示同一回個物件了。如果 答my...

c中delete之後的再new問題

作為指標型簡單變數使用刪不刪,都可以用,就等於已宣告瞭 int p 指標本身已有儲存單版元。new int 是給它分配存權 放指向數值的單元。delete 只刪了 存放指向數值的單元。指標本身單元還在。只要它的使用符合語法,仍然可用。例如 a 2 b 3 p a printf d n p p b p...