2014-06-05 63 views
-1

我有困難解析這行代碼:指針和方括號

int *a=new int[N]; 

所以這個聲明稱爲「」一個新的整數指針,無論它指向將存儲新的指針指向大小爲(int + N)的對象。這是因爲

int[N]:=*(int+N) 

這個問題是,N是類size_t的一個實例,那麼如何增加是有意義的?完整的代碼如下:

int main() 
{ 
const std::size_t N = 100; 
int* a = new int[N]; 

for (std::size_t n = 0; n < N; ++n) 
    a[n] = n; 

delete[] a; 
} 
+2

'a'指向'int'。這個「int」是大小爲「N」的連續範圍「int」中的第一個。而'std :: size_t'不是一個類。它必須是一個完整的類型。 – chris

+0

哦 - 那麼右邊是一個新陣列?應該用數組還是指針來理解? –

+1

您可以將其稱爲指向免費商店陣列的指針。指向數組的指針可能與'int(*)[N]'模糊不清。 – chris

回答

5

你治療int[N]就好像它是一個數組訪問,就像array[5]是一樣的*(array + 5)。這並不是什麼。畢竟,int是一種類型。

new int[N]實際上是一個表達式,它分配了一個數組Nint s。它返回一個指向該數組中第一個int的指針,然後將其分配給a

值得注意的是,每個像這樣的表達式都應該加上一個delete[],當你完成這個操作時它負責釋放陣列(就像每個正常的new應該有delete一樣)。

4

我有困難解析這行代碼:

int *a=new int[N]; 

如果N等於10,這是在內存中會發生什麼:

0 1 2 3 4 5 6 7 8 9 
+---+---+---+---+---+---+---+---+---+---+ 
| | | | | | | | | | | 
+---+---+---+---+---+---+---+---+---+---+ 
^
    | 
+-|-+ 
| * | a 
+---+ 

也就是說,你在堆上創建一個10個整數的數組,並且a指向這些整數中的第一個。