簡體   English   中英

int * array [60]和int * array = new int(60)之間的區別;

[英]Difference between int * array[60] and int * array = new int(60);

int * array[60]; //creates an array of 60 pointers to an int
int * array = new int(60); //same thing?

這些都會產生相同類型的數組嗎? 例如指向整數的指針數組

我知道第一個未初始化,第二個初始化,但我不確定第二個創建的是什么。

int * array = new int(60); //same thing?

不,他們不是一回事。 array只是一個指針,然后指向一個初始化值為60的int。

如果你的意思是int * array = new int[60]; array將指向一個60個整數的數組,它們仍然不是一回事。

請注意,就像聲明一樣, int* array意味着它是一個指針 ,而int* array[60]意味着它是一個數組 (60個指針)。 (數組可能會衰減為指針,即int**int* array[60] ,它與int* 。)

也許你沒有意識到第二種情況不是數組,下面的程序打印60

#include <iostream>

int main() {
    int* foo = new int(60);
    std::cout << *foo << '\n';
    return 0;
}

這是兩張圖片,說明了兩者之間的差異

int * array[5]; 

int * array = new int(5);

要創建指針int 數組,請使用int * array = new int[5];

代碼

調試視圖

其中一個創建一個數組,另一個沒有。

int * array[60]; // Creates an array of 60 integer pointers

為了幫助理解差異,請考慮第一行在內存中創建一個60指針塊(例如,如果你在main中,則在堆棧中),但第二行只是一個指針塊。

兩者都是完全不同的類型。 例如,嘗試以下操作:

array++;

在第一行,它不起作用。 在第二個,沒關系。 如果你試試:

array[0]++;

在第一行中,您更改第一個指針,在第二行中,您將1添加到整數(更改為61)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM