2012-04-24 74 views
0

有人可以請解釋一下這個代碼使用*(指針+ I)與指針[I]

// Option 1 
int **p = new Point*[2]; 
p[1] = new Point; 
p[1]->x = p[1]->x = 1; 

// Option 2 
int **p = new Point*[2]; 
*(p+1) = new Point; 
(*(p+1))->x = (*(p+1))->x = 1; 

是不是這兩個選項一樣嗎?爲什麼當我使用選項2創建變量時,我不能使用選項1(我得到隨機數字(地址數字?))寫入它的值?有什麼區別嗎?

+10

是的,有區別;第二個例子從不初始化y。 – 2012-04-24 18:45:53

+2

那麼,有一件事你不會在選項2中指定任何東西 - 你會 - > x兩次。 – 2012-04-24 18:46:56

+1

哦,我看到你現在編輯你的例子,這樣兩個選項都有相同的錯誤。 – 2012-04-24 19:20:16

回答

1

你有一個錯字:(*(p+1))->x = (*(p+1))->x = 1; - 應該是y在第二項

+0

對不起,應該按照你寫的「x」。我寫了一個項目,並在printf上獲得了不同的輸出(「%f!=%f」,p [1],*(p + 1)); – Buksy 2012-04-24 19:11:21

+0

@Buksy你爲什麼在那裏使用%f? %f期望一個double,而不是一個指向結構體的指針。 _當然,它會打印兩個不同的值! – 2012-04-24 19:23:00