鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 3

[已解决]C语言,二维数组指针

[复制链接]
发表于 2020-8-6 20:57:30 | 显示全部楼层 |阅读模式

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

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

x
求大佬解答下,为什么最后同样用地址来输出元素数,在主函数直接打印元素值是对的,而在子函数打印出来确是错的,不知道是不是形参实参的问题。
在子函数中,我的理解是二维数组首地址传递过去了,打印应该是*(*(a+i)+j)),但是系统报错。。

//例题3.通过输入指定行数和列数,打印二维数组对应指定行,列的那一个元素的值。
void main()
{
    void print(int*a,int i,int j);
    int (*p)[4],i,j,c[3][4],a,b;
    p=c;
    printf("Please input 12 numbers:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",*(p+i)+j);
        }
    }
    printf("Please input row number and line number:\n");
    while(scanf("%d %d",&a,&b)!=2||(a<0||a>2)||(b<0||b>3))
    {
     printf("Illegal input!!\nPlease input again!!\n");
    }
     print(c,a,b);
    /*printf("%d\n",*(*(c+a)+b));*/
}

void print(int *a,int i,int j)
{
   printf("%d\n",(*(a+i)+j));
}
最佳答案
2020-8-6 21:28:27
#include <stdio.h>

int main()
{
    void print(int (*a)[4],int i,int j);
    int (*p)[4],i,j,c[3][4],a,b;
    p=c;
    printf("Please input 12 numbers:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",*(p+i)+j);
        }
    }

    printf("Please input row number and line number:\n");
    while(scanf("%d %d",&a,&b)!=2||(a<0||a>2)||(b<0||b>3))
    {
              printf("Illegal input!!\nPlease input again!!\n");
        }
    print(c,a,b);
     /*printf("%d\n",*(*(c+a)+b));*/
}

void print(int (*a)[4],int i,int j)
{
        printf("%d\n",*(*(a+i)+j));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-6 21:26:07 | 显示全部楼层
#include <stdio.h>

int main()
{
    void print(int a[][4],int i,int j);
    int (*p)[4],i,j,c[3][4],a,b;
    p=c;
    printf("Please input 12 numbers:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",*(p+i)+j);
        }
    }

    printf("Please input row number and line number:\n");
    while(scanf("%d %d",&a,&b)!=2||(a<0||a>2)||(b<0||b>3))
    {
              printf("Illegal input!!\nPlease input again!!\n");
        }
    print(c,a,b);
     /*printf("%d\n",*(*(c+a)+b));*/
}

void print(int a[][4],int i,int j)
{
        printf("%d\n",*(*(a+i)+j));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 21:27:03 | 显示全部楼层
本帖最后由 baige 于 2020-8-6 21:32 编辑

详情请看
https://www.cnblogs.com/Ager/archive/2015/09/10/4799075.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-6 21:28:27 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int main()
{
    void print(int (*a)[4],int i,int j);
    int (*p)[4],i,j,c[3][4],a,b;
    p=c;
    printf("Please input 12 numbers:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",*(p+i)+j);
        }
    }

    printf("Please input row number and line number:\n");
    while(scanf("%d %d",&a,&b)!=2||(a<0||a>2)||(b<0||b>3))
    {
              printf("Illegal input!!\nPlease input again!!\n");
        }
    print(c,a,b);
     /*printf("%d\n",*(*(c+a)+b));*/
}

void print(int (*a)[4],int i,int j)
{
        printf("%d\n",*(*(a+i)+j));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 09:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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