鱼C论坛

 找回密码
 立即注册
查看: 1273|回复: 2

二维数组与指针的小问题

[复制链接]
发表于 2015-6-22 22:38:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

该代码的目的是输入想要查询的行和列数,之后把查询的结果输出出来,我有试过输出出来,目的可以实现。但是有个小疑问,如果我去掉列数的输入限制。在用户输入的列数超出数组范围的时候。依旧会得出数值,而非地址。这是为什么呢!为什么会输出数值呢,二维数组里面不是没有这个值吗。废话不多说直接上代码求解答!这个是正确的代码,不妨各位手动把列的for循环备注掉试试看
#include<stdio.h>
void main()
{
        int a,b;
        int s[3][4]={{0,1,2,3},{00,11,22,33},{000,111,222,333}};
        int *p,*p1,(*p3)[4];
        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));

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-23 15:50:23 | 显示全部楼层
你输入的列数是什么?二维数组的元素在内存中是连续排列的,超过列的范围,就读下一行相应的数据了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-8 19:31:47 | 显示全部楼层
*(*(p3+*p)+*p1) 位置问题,比如你输入了行数1,*p==00  p3是指针 p3+*p==p3  地址没变
*(p3+*p)==*p3      p3->s[0]      s[0]==0
这时候你不管输入列是多少,哦要小于12,该数都会在数组内
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 04:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表