防止二維陣列元素的越界
阿新 • • 發佈:2019-01-05
二維陣列的單迴圈輸出
定義不同的指標變數時,二維陣列的輸出,嚴防越界!
/* *copyright(c) 2018,HH *All rights reserved. *作 者:HH *完成日期:2018年7月25日 *版本號:v1.0 * *問題描:二維陣列的單迴圈輸出,嚴防陣列元素越界!!! *輸入描述:; *程式輸出: */ #include <stdio.h> int main() { int a[2][3]={{1,2,3},{4,5,6}}; int *p1,*p2,*p3; p1=a;//此種定義,嚴防陣列越界!!!! p2=*a; p3=a[0]; printf("p1=a的地址是:%d,值是:%d\n",p1,*p1); printf("p2=*a的地址是:%d,值是:%d\n",p2,*p2); printf("p3=a[0]的地址是:%d,值是:%d\n",p3,*p3); for(p1=a;p1<a+6;p1++)//重點:a+6代表陣列a的第6行,因此在a+3時,陣列已經出現了越界!!! { printf("%d ",*p1);//不正常輸出,第0行到第5行,共計6行,18個值,72個位元組,地址2686716~2686788 } printf("\n"); for(p1=a;p1<a+2;p1++)//修改後,僅輸出第0行,第1行時,輸出正常,不會發生越界!! { printf("%d ",*p1);//正常輸出 } printf("\n"); for(p2=*a;p2<*a+6;p2++)//同樣的當p2<*a+7時,也會出現一個越界的元素! { printf("%d ",*p2);//正常輸出,6個值,24位元組,地址2686716~2686740 } printf("\n"); for(p3=a[0];p3<a[0]+6;p3++)//同樣的當p3<a[0]+7時,也會出現一個越界的元素! { printf("%d ",*p3);//正常輸出,6個值,24位元組,地址2686716~2686740 } printf("\n"); return 0; }