二维数组与指针的小问题
本帖最后由 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));
}
你输入的列数是什么?二维数组的元素在内存中是连续排列的,超过列的范围,就读下一行相应的数据了 *(*(p3+*p)+*p1) 位置问题,比如你输入了行数1,*p==00p3是指针 p3+*p==p3地址没变
*(p3+*p)==*p3 p3->s s==0
这时候你不管输入列是多少,哦要小于12,该数都会在数组内
页:
[1]