我是初學者,這個問題總讓我困惑。我的學術書說新操作員返回一個地址。但在許多教程中,我發現新的返回指向特定地址的指針。拿這個:新操作員返回什麼?
char *name = new char[x];
什麼值分配給這裏的名稱,動態分配的地址或指向動態分配的字符的指針? 謝謝
我是初學者,這個問題總讓我困惑。我的學術書說新操作員返回一個地址。但在許多教程中,我發現新的返回指向特定地址的指針。拿這個:新操作員返回什麼?
char *name = new char[x];
什麼值分配給這裏的名稱,動態分配的地址或指向動態分配的字符的指針? 謝謝
簡而言之: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]
訪問數組的第二個元素。
運算符new將指針返回到數組的開頭。
指針是內存中某個單元格的地址。
這就是爲什麼我們可以這樣說:Operator new返回一個地址到數組的開頭。
對不起,我的英語。
指針是一個包含另一個變量地址的變量。所以這兩個陳述大致相同。返回包含地址的指針。
當你說這個指針指向某個東西時,這意味着它包含了它的地址。
數組形式的新表達式(如new char[x]
)的結果是一個指針(在這種情況下的類型爲char *
)。像使用操作符new
的數組形式時,該指針的值是動態分配數組的第一個元素的地址。當使用非數組形式時(如在new char
中),分配一個對象,並且指針的值等於該對象的地址。
由語句char *name = new char[x]
分配的變量name
的值是由表達式new char [x]
給出的指針的值。
如果在分配過程中發生錯誤,則運算符new將拋出異常而不是返回值,並且變量name
從不會收到值。 [這可以通過使用operator new的替代形式來改變,返回NULL
錯誤,不要拋出,但你沒有這樣做]。
數組新表達式new T[N]
的值是N
的T
動態分配數組的第一個元素的地址。這個值的類型是T *
,即這種地址的指針類型。
數組對象本身通常不可尋址,您通常不能命名完整對象(實際上,您甚至不能說它的類型爲)。您只能命名其每個元素子對象,並且只能通過其第一個元素的地址銷燬和取消分配數組對象。
表達
new char[x]
分配char
對象的數組,並在索引零返回一個指針(char*
類型)的對象。
如果你想動態分配一個指針,應該使用
new char*
其中動態地分配char*
類型,並且返回的一個目的是(char**
類型的)指向它的指針。
請注意,「地址」和「指針」對於C和C++語言來說意味着相同的內容,並且與內存位置地址的硬件思想沒有關係,除了事實,即編譯器通常實現它們。 – Hurkyl
指針是一個能夠存儲地址的變量。 'new'返回的地址存儲在指針中。這就是爲什麼我們稱它們爲*指針*,因爲它們指向一個地址。 – Galik