鱼C论坛

 找回密码
 立即注册
查看: 776|回复: 4

[已解决]关于指针与二维数组的问题

[复制链接]
发表于 2022-3-7 19:28:57 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
float average(int *x,int H,int L)
{
int i,j;
float s,t;
for(i=0,s=0;i<H;i++)
    {
        for(j=0;j<L;j++)
        {
           s=s+*(x+i*L+j);
        }
    }
t=s/H/L;
return t;
}
void maxs_mins(int *x,int h,int l,int *p,int *q,int y)
{
    int i,j,m,n;
    for(i=0,m=0,n=0;i<h;i++)
    {
        for(j=0;j<l;j++)
        {
            if(*(x+i*l+j)<y)
            {
                m=m+1;
            }
            if(*(x+i*l+j)>y)
            {
                n=n+1;
            }
        }
    }
    *p=m;
    *q=n;
}
main()
{
    int a[2][3]={1,2,3,5,6,7};
    int *maxs,*mins;
    int u;
    u=average(*a,2,3);
    maxs_mins(*a,2,3,&maxs,&mins,u);
    printf("%d %d %d",u,maxs,mins);
}






11111111111111111111111
*(x+i*L+j)这个指针是真怎么表示二维数组的 这个原理没看明白
最佳答案
2022-3-8 17:22:15
ba21 发表于 2022-3-7 21:56
int a[2][3]={1,2,3,5,6,7};
int a[6]={1,2,3,5,6,7};
2个同等于吗?

*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 21:56:40 | 显示全部楼层
int a[2][3]={1,2,3,5,6,7};
int a[6]={1,2,3,5,6,7};
2个同等于吗?

不管你是1维2维N维,它的数据在内存中都是连续存放的。不管你N维它都是线性的1维,多维只是为了某些情况下方便。
*(x+i*L+j) 这什么意思? x+i*L+j 就是一个整型数值咯,在这里这个数值是一个地址,*(x+i*L+j) 前面一个*就是取该 地址的值。
========================================================================================
float average(int *x,int H,int L) // 1. 首地址、H行,L列
{
int i,j;
float s,t;
for(i=0,s=0;i<H;i++) // 2. 遍历行,当前第i行,最大H-1行
    {
        for(j=0;j<L;j++) // 3. 遍历列,当前第j列,最大L-1列
        {
           s=s+*(x+i*L+j); // 4. *(x+i*L+j) x首地址+第(i*L)行第j列(二维的概念,1维的方式索引数据)
                   printf("ba21=%d\n", *(x+i*L+j) );
        }
    }
t=s/H/L;
return t;
}

=======================================================================
*(x+i*L+j)

a[2][3]={1,2,3,5,6,7};

2行3列,假设首地址为0001。
1, 2, 3
5 ,6, 7

i=0, j=0, L=3
*(x+i*L+j) == *(0001+0*3+0)  == *0001 == 1

i=1, j=0, L=3
*(x+i*L+j) == *(0001+1*3+0)  == *0004 == 5  // 1*3 使其夸了1行的跨度的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-8 17:22:15 | 显示全部楼层    本楼为最佳答案   
ba21 发表于 2022-3-7 21:56
int a[2][3]={1,2,3,5,6,7};
int a[6]={1,2,3,5,6,7};
2个同等于吗?

*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-8 18:33:02 | 显示全部楼层
番杰 发表于 2022-3-8 17:22
*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。

是指针类型没错。
你有更好的见解,你可以解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-10 16:42:40 | 显示全部楼层
番杰 发表于 2022-3-8 17:22
*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。

好的谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 13:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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