2013-12-16 50 views
1

的我找到一塊在教科書C++代碼和有一些問題:關於綁定陣列

int ia[10]; // an integer array with 10 elements 
int *ptr = ia; //the address of the first element in array. 
int *end = &ia[10]; // 
while (ptr != end){ 
    std::cout<<*(ptr++)<<" "; 
} 
std::cout<<std::endl; 

由於,此數組的邊界是從0到9,這意味着ia[10]是超出界限。 爲什麼允許在CC++

+0

你確定這是代碼形式教科書B/C'IA [10]'是不確定的行爲雖然指向一個過去的結束是確定的。 –

+0

@ShafikYaghmour是的,它來自「C++ primer 3th edition」。 –

+0

我很確定這是有效的C,但不是C++。 – chris

回答

1

end指向緊接在ia的10個元素之後的地址。然後,while循環會查看ptr(它是沿着數組的步進指針)何時到達數組ia後的地址,並因此循環終止。這樣就不會嘗試輸出超出初始ia數組的任何值。

關鍵是C使用對內存位置的引用。

本章第2會給更多的信息:http://pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf

+0

感謝您的親切解釋。 –

+0

沒問題。檢查我的編輯鏈接更多信息。 – Gavin