2015-09-08 36 views
0

我是初學者,這個問題總讓我困惑。我的學術書說新操作員返回一個地址。但在許多教程中,我發現新的返回指向特定地址的指針。拿這個:新操作員返回什麼?

char *name = new char[x]; 

什麼值分配給這裏的名稱,動態分配的地址或指向動態分配的字符的指針? 謝謝

+0

請注意,「地址」和「指針」對於C和C++語言來說意味着相同的內容,並且與內存位置地址的硬件思想沒有關係,除了事實,即編譯器通常實現它們。 – Hurkyl

+1

指針是一個能夠存儲地址的變量。 'new'返回的地址存儲在指針中。這就是爲什麼我們稱它們爲*指針*,因爲它們指向一個地址。 – Galik

回答

0

簡而言之:new運算符返回分配對象的唯一地址。分配一個對象數組時,返回第一個對象的地址。

char *name = new char[x]; 
// name is a char pointer that contains the address to the first char from your char array 

name[0]訪問數組的第一個元素。 name[1]訪問數組的第二個元素。

1

運算符new將指針返回到數組的開頭。

指針是內存中某個單元格的地址。

這就是爲什麼我們可以這樣說:Operator new返回一個地址到數組的開頭。


對不起,我的英語。

5

指針是一個包含另一個變量地址的變量。所以這兩個陳述大致相同。返回包含地址的指針。

當你說這個指針指向某個東西時,這意味着它包含了它的地址。

0

數組形式的新表達式(如new char[x])的結果是一個指針(在這種情況下的類型爲char *)。像使用操作符new的數組形式時,該指針的值是動態分配數組的第一個元素的地址。當使用非數組形式時(如在new char中),分配一個對象,並且指針的值等於該對象的地址。

由語句char *name = new char[x]分配的變量name的值是由表達式new char [x]給出的指針的值。

如果在分配過程中發生錯誤,則運算符new將拋出異常而不是返回值,並且變量name從不會收到值。 [這可以通過使用operator new的替代形式來改變,返回NULL錯誤,不要拋出,但你沒有這樣做]。

0

數組新表達式new T[N]的值是NT動態分配數組的第一個元素的地址。這個值的類型是T *,即這種地址的指針類型。

數組對象本身通常不可尋址,您通常不能命名完整對象(實際上,您甚至不能說它的類型爲)。您只能命名其每個元素子對象,並且只能通過其第一個元素的地址銷燬和取消分配數組對象。

0

表達

new char[x] 

分配char對象的數組,並在索引零返回一個指針(char*類型)的對象。

如果你想動態分配一個指針,應該使用

new char* 

其中動態地分配char*類型,並且返回的一個目的是(char**類型的)指向它的指針。

相關問題