gpt4 book ai didi

c - 使用指针 C 将二维数组传递给函数

转载 作者:行者123 更新时间:2023-11-30 21:09:18 25 4
gpt4 key购买 nike

这是我的代码示例(幻方):

    int magicsqr(int *magic,int size);
int main()
{
int size,*ptr;
char stop;
repeat:
printf("Please Enter an Odd number for the magic square(3 or greater):\n");
scanf("%d",&size);
fflush(stdin);
ptr=(int*)calloc(size*size,sizeof(int));
while((size%2==0)||(size<=1))
{
printf("U entered a wrong number.\n");
repeat1:
printf("Do you wish to continue?(Y or N)\n");
scanf("%c",&stop);
fflush(stdin);
if(stop=='Y'||stop=='y')
goto repeat;
else if(stop=='N'||stop=='n')
printf("Thanks for trying our beta program.\n");
else
{
printf("U entered a wrong character.\n");
goto repeat1;
}
}
magicsqr(ptr,size);
return 0;
}
int magicsqr(int *magic,int size)
{
int i,j,num;
i=1;
j=(size+1)/2;
for(num=1;num<=size*size;num++)
{
*(magic+i*size+j)=num;
if(num%size==0){
i++;
continue;
}
if(i==1)
i=size;
else
i--;
if(j==size)
j=1;
else
j++;
}
for(i=1;i<=size;i++)
{
printf("\n");
for(j=1;j<=size;j++)
printf("%d\t",*(magic+i*size+j));
}
}

所以我有一些让我困惑的问题..

1-据我所知Arr[i][j]==*(Arr[i]+j)那么为什么只有这个有效:*(magic+i*size+j)

2-我在使用指针将二维数组传递到函数中阅读了很多内容,但不知何故我仍然感到困惑,如何在这段代码中表示二维数组或更多。

3-我还是一个编程初学者,所以我希望你能解释一下。

  • 非常感谢大家,终于我使用指针到指针和指针数组实现了它的工作。

最佳答案

这根本不是一个二维数组,而是一个用于模仿二维数组的一维数组。

所以,内存分配是

ptr=calloc(size*size,sizeof(int));

这是对(size * size)元素的一维数组的分配

像这样访问该数组的数据

*(magic+i*size+j)=num;

每个元素位置是通过添加行数 * i + j从基本索引计算出来的。

这些称为平面数组。

关于c - 使用指针 C 将二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com