zzk5015377 发表于 2022-3-7 19:28:57

关于指针与二维数组的问题

#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={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)这个指针是真怎么表示二维数组的 这个原理没看明白

ba21 发表于 2022-3-7 21:56:40

int a={1,2,3,5,6,7};
int a={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={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行的跨度的地址。

番杰 发表于 2022-3-8 17:22:15

ba21 发表于 2022-3-7 21:56
int a={1,2,3,5,6,7};
int a={1,2,3,5,6,7};
2个同等于吗?


*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。

ba21 发表于 2022-3-8 18:33:02

番杰 发表于 2022-3-8 17:22
*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。

是指针类型没错。
你有更好的见解,你可以解答。

zzk5015377 发表于 2022-3-10 16:42:40

番杰 发表于 2022-3-8 17:22
*(x+i*L+j) 中的 x+i*L+j 应该不是是一个整型数值吧,
应该是一个整型的指针类型吧。

好的谢谢~
页: [1]
查看完整版本: 关于指针与二维数组的问题