C/C++數組的下標可以爲負

今天偶然碰到C/C++的數組下標可以爲負值,感到十分奇怪。平時寫代碼,下標都是從零開始,從來沒考慮到這個問題。寫了一下測試代碼,居然通過了。但是值卻是亂的。但是如果你寫下標的值在數組的範圍內,是可以輸出一個正確的值的。

int a[5] = {1,2,3,4,5};
 int *ptr1 = (int*)(&a+1);
 
  printf("%x,%x,",ptr1[-1]);

這個結果就是爲5;
後來上網查了一下,也思考了一下,覺得其實挺正常的。數組的下標其實就是數組的頭指針在移動,而在C/C++中,編譯器是沒有對數組進行越界檢查的。例如上面的,你輸出a[6]也是沒錯的,只是值是亂的而已。
這個特性其實在開發中幾乎用不到,原因就是C/C++的編譯器懶。在Java或者OC中,都是報錯的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章