Anny黄 发表于 2015-6-22 22:38:35

二维数组与指针的小问题

本帖最后由 Anny黄 于 2015-6-22 22:40 编辑

该代码的目的是输入想要查询的行和列数,之后把查询的结果输出出来,我有试过输出出来,目的可以实现。但是有个小疑问,如果我去掉列数的输入限制。在用户输入的列数超出数组范围的时候。依旧会得出数值,而非地址。这是为什么呢!为什么会输出数值呢,二维数组里面不是没有这个值吗。废话不多说直接上代码求解答!这个是正确的代码,不妨各位手动把列的for循环备注掉试试看

#include<stdio.h>
void main()
{
        int a,b;
        int s={{0,1,2,3},{00,11,22,33},{000,111,222,333}};
        int *p,*p1,(*p3);
        printf("请输入行数:");
        scanf("%d",&a);
        for(;a>2 || a<0;)
        {
                printf("输入错误,请重新输入行数:");
                scanf("%d",&a);
        }
        p=&a;
        printf("请输入列数:");
        scanf("%d",&b);
        for(;b>3 || b<0;)
        {
                printf("输入错误,请重新输入列数:");
                scanf("%d",&b);
        }
        p3=s;
        p1=&b;
        printf("s [%d] [%d] = %d",*p,*p1,*(*(p3+*p)+*p1));

}

Victory_6226 发表于 2015-6-23 15:50:23

你输入的列数是什么?二维数组的元素在内存中是连续排列的,超过列的范围,就读下一行相应的数据了

nin98 发表于 2015-7-8 19:31:47

*(*(p3+*p)+*p1) 位置问题,比如你输入了行数1,*p==00p3是指针 p3+*p==p3地址没变
*(p3+*p)==*p3      p3->s      s==0
这时候你不管输入列是多少,哦要小于12,该数都会在数组内
页: [1]
查看完整版本: 二维数组与指针的小问题