【发布时间】:2019-04-12 01:08:42
【问题描述】:
我是初学者,正在尝试了解多维数组的工作原理
请看这段代码:
#include<stdio.h>
void getData(int c;int *a,int r,int c)
{
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
scanf("%d",(*(a+i)+j)); //warning
return;
}
void putData(int c;int *a,int r,int c)
{
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
printf("%d",*(*(a+i)+j)); //error
printf("\n");
}
int main(void)
{
int r1,r2,c1,c2;
printf("Enter order of A:\n");
scanf("%d %d",&r1,&c1);
printf("Enter order of B:\n");
scanf("%d %d",&r2,&c2);
int a[r1][c1],b[r2][c2];
getData((int *)a,r1,c1);
getData((int *)b,r2,c2);
putData((int *)b,r2,c2);
}
我无法理解指针如何传递给函数以及错误的原因。但我想如果我能理解指针是如何工作的,那么我可能能够调试它。 请帮忙!谢谢!
编辑:我真的很想了解指针如何与寻址和东西一起工作。因此,如果有某种追踪,它可能会对我有所帮助
【问题讨论】:
-
索引一维数组时,函数知道如何根据数据类型索引数组。例如,当您使用整数时,假设一个整数在传递数组时占用 4 个字节(取决于机器),您将指针传递给数组中的第一个元素,然后函数可以通过递增指针来找到 arr[1]按整数的大小,例如 4 个字节。想想如果函数是 2D 数组并且您尝试访问 arr[0][1] 函数可能需要什么额外信息
-
所以应该是
*(*(a*i)+j)? -
很遗憾我现在没有时间。希望有人会帮助,如果没有,我明天会回来。我会查找诸如“如何将 2D 数组传递给函数”之类的内容。
-
void getData(int c;int *a,int r,int c)是语法错误
标签: c pointers multidimensional-array