請問c裡面,int p new int 2 是為p指標申請堆區大小為4的指標域,並賦值

2021-08-11 19:13:50 字數 3522 閱讀 7949

1樓:金色潛鳥

int *p=new int(2);

這裡的 int(2) 是呼叫構建函式,引數值是2。

意思是 宣告 p 是 整型指標,動態分配 sizeof(int) 位元組儲存區給它,初始化為 2。

於是,語句裡可以用 *p, p[0], delete p;

-------

int *p=new int[2](2);

語法錯,不可以對陣列作初始化。

只可以 int *p=new int[2];

-------

「int *p=new int;的意思應該是申請一個不指定大小的整形空間,」

不是的。意思應當是 宣告 p 是 整型指標,動態分配 sizeof(int) 位元組儲存區給它。

2樓:匿名使用者

int * p = new int[2];

語句格式為上面形式,最後不需要一對小括號。

意思是從系統堆中分配兩個int型的空間,為連續8位元組空間(在win32系統中int為32位,4位元組),並由指標p指向已分配空間的起始地址(即第一個陣列元素的地址)。分配後新記憶體中的值一般並不會自動初始化為0,而應該由程式設計師進行初始化(可用memset或zeromemory函式,也可採用迴圈語句實現)。

在釋放由new 關鍵字分配的陣列空間時,一般要用帶的 delete語句格式(此例中即為: delete p;),不帶的格式用於釋放由new 分配的單個變數記憶體空間,用未帶的delete釋放此例中的p從語法上來看並未出錯,編譯時不會報錯,實際可能只釋放了陣列的第一個元素,這也可能是你在vs2010中執行結束時彈出錯提示的原因。

由於c/c++語法靈活多變,再者記憶體的申請與釋放以及指標的管理是c/c++中最易出錯和較難理解的部分,建議仔細閱讀c/c++中記憶體分配與釋放相關的說明,嚴格按正確的語法書寫**。

c++ 宣告指標空間問題:int *p=new int(10) 與 int *p=new int[

3樓:

int *p=new int(10) 開闢一個指標p p指的內容是一個整型,值為10

int *p=new int[10] 開闢一個長為10的陣列,預設每個值都是0,p指向array的開頭

c++ int *p = new int; 這裡的動態記憶體會預設初始化成嗎?

4樓:物理公司的

new int [n]會申請一個n個int元素的記憶體空間,相當於一個n個int元素的陣列,這個值會被賦值給p[i]。

p為int *為元素的陣列,或int**指標,其中p[i]為p的第i個元素。

於是這句話的意思就是,在p的第i個元素分配n個int元素的空間。

其後可以使用p[i][0]到p[i][n-1]共計n個元素。使用後,需要呼叫

delete p[i];

若有說明:int n=2,*p=&n,*q=p;則以下非法的賦值語句是

5樓:匿名使用者

p*n是非法的bai。

指標(pointer)是程式語言中du的一個物件,利zhi用地址,它的值直dao接內指向(points to)存在電腦儲存器中另容一個地方的值。

題目中int n=2,*p=&n,*q=p 定義整型n,p是一個指向n的指標,它的值為n的地址。q是一個指標,q的值和p的值相同,也就是它倆是同樣的地址。

p=q使得p的值等於q的值,它倆都是指標,可以賦值。*p=*q意思是指標q指向的值賦給q地址指向的值。n=*q是將指標q所指向的值賦給n。

p*n,因為兩者不是同一型別資料,所以不能進行運算,所以這個是錯的。

6樓:聽不清啊

d p*n 就是非法的,不能正確執行。

7樓:匿名使用者

p是指標,n是整數 不能使用*號

不能將int *轉化為int型

c++中,int *p=new int是可有可無的嗎?

8樓:匿名使用者

int *p = new int;

是在堆中給變數分配了一個空間,當用完後需要手動釋放。可以使用delete()函式

如果沒有int *p = new int; 是不能給p進行賦值的 因為沒有分配空間。

你也可以使用malloc分配空間,但最後釋放的時候要使用free()函式

9樓:匿名使用者

如果是int * p;

*p = 0;

那麼結果是不可預知的,可能正常執行,也可能立即崩潰,或者在任何無法預知的時候出現任何無法預知的問題。

如果是int t;

int * p=new int;

p = &t;

將會造成記憶體洩漏,如果多次出現這樣的情況,將會導致程式可用的記憶體越來越少。

10樓:千江月

不是可有可無的,得看你如何使用

舉例:1、 int *p = new int;

*p = 5;

此時p沒有空間必須申請

2、int a = 5;

int *p;

p = &a; //p不用重新申請空間,它指向a的空間。。

11樓:匿名使用者

看你對p賦值是什麼意思了。

如果說讓p指向另外一個int *指標可以。

但是如果說你要 *p =1或者什麼就不行了。

必須得new int分配空間

c++ int n; int *p=new int[n];怎樣初始化

12樓:好激動加入

new int [n]會申

復請一個n個int元素的內製存空間,相當於一個n個int元素的陣列bai,這個值會被賦值給dup[i]。

p為int *為元素的陣列,

或zhiint**指標,其中p[i]為p的第i個元dao素。

於是這句話的意思就是,在p的第i個元素分配n個int元素的空間。

其後可以使用p[i][0]到p[i][n-1]共計n個元素。使用後,需要呼叫

delete p[i];

剛學了c++ new運算子 int*p=new int[10];為陣列分配記憶體空間 那麼陣列名是什麼

13樓:莖肛戰士譚擾

在c++中,陣列名其實也是指標,它指向陣列的起始地址,通過起始地址(陣列名),就可以訪問陣列的各個元素。這裡int*p=new int[10];其實就是定義了一個指標,指向一個陣列的起始地址,該資料具有10個int型別的元素。 陣列名與指標的區別在於,陣列名是指標常量,不可以改變(++,--等運算),而指標是變數,可以改變,也就是可以進行++,--等運算來指向下一個(上一個)陣列元素。

希望採納

14樓:手機使用者

額,在c++中,new申請的記憶體是在堆上的,不是堆疊上的 所以,你申請的記憶體是動態記憶體,而這個陣列的是沒有名字的,只有通過指標p進行匿名訪問,他是一個動態陣列!

C中,intpnewint為什麼不正確

這樣子是沒有問題的啊,你定義了一個二重指標,指向了一個具有5個int 元素的陣列。除了沒有分號外,沒看出 不正確 是不是你最後沒有打分號。c 中,int p new int是可有可無的嗎?int p new int 是在堆中給變數分配了一個空間,當用完後需要手動釋放。可以使用delete 函式 如果...

請問C 中成員函式在類裡面定義和在類外定義有什麼區別

效能來說沒啥區別。不過放在類外,的定義和實現分開,有利於 封轉,別人需要呼叫你的介面的時候,你可以只給他標頭檔案,的實現自己留著。在類裡定義時,這種函式會被編譯器編譯成行內函數,在類外定義的函式則不會。行內函數的好處是加快程式的執行速度,缺點是會增加程式的尺寸。比較推薦的寫法是把一個經常要用的而且實...

c語言裡面符號什麼意思,c語言裡面一個符號什麼意思?

兩個 表示或的意思,a b,a或b,只要有一個為真,表示式就是真 數字鍵那一排右邊數起第二,即在退位鍵前,要打上端 即先壓住shift鍵再打此鍵就出來了。c語言裡面這個符號 是什麼意思?怎麼用?指向 的意思,常用於結構體指標變數訪問成員。延展 運算子 通過結構體指標變數直接獲得結構體變數的成員變數,...