1. 程式人生 > >防止二維陣列元素的越界

防止二維陣列元素的越界

二維陣列的單迴圈輸出

定義不同的指標變數時,二維陣列的輸出,嚴防越界!

/*
*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;
}