防止二维数组元素的越界

二维数组的单循环输出

定义不同的指针变量时,二维数组的输出,严防越界!

/*
*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);//不正常输出,第0行到第5行,共计6行,18个值,72个字节,地址2686716~2686788
    }
    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;
}

猜你喜欢

转载自blog.csdn.net/pl0020/article/details/81207093
今日推荐