【发布时间】:2017-11-11 18:44:08
【问题描述】:
void enterTwoArrays()
{
printf("Enter m!\n");
scanf("%d",&m);
printf("Enter n!\n");
scanf("%d",&n);
int arr[m][n];
printf("Enter m2!\n");
scanf("%d",&m2);
printf("Enter n2!\n");
scanf("%d",&n2);
int arr2[m2][n2];
for(i=0; i<=m-1; i++)
{
for(j=0; j<=n-1; j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i=0; i<=m2-1; i++)
{
for(j=0; j<=n2-1; j++)
{
scanf("%d",&arr2[i][j]);
}
}
}
void addition(int arr[m][n], int arr2[m2][n2])
{
int arr3[m][n];
for(i=0; i<=m-1; i++)
{
for(j=0; j<=n-1; j++)
{
arr3[i][j]=arr[i][j]+arr2[i][j];
}
}
}
嘿,我确实有问题。我在 C 中得到了这两个函数。我的想法是在第一个函数中我将创建和填充数组。第二个函数将添加两个数组的值。但是当我尝试时,程序崩溃了。我想我知道问题出在哪里。因为我的数组是本地的,以后我不能将它们从 main 发送到第二个函数。那么我该如何解决这个问题呢?在不知道 n 和 m 变量的情况下,我无法在 main/be4 main 中声明这些数组。
【问题讨论】:
-
您可以将指针传递给数组。
-
将指向数组的指针作为参数传递给函数。
-
我看不出您的代码本身有什么问题,但它确实取决于
m2和n2至少分别与m和n一样大。如果在给定的运行中不是这种情况,则函数addition()将尝试在其边界之外访问arr2。也许您应该只读取一组常见的维度,并将其用于两个数组。 -
更正:您确实有一个错误,但它与将数组传递给
addition()无关。在输入数组arr2的元素的地方,您将传递数组元素,而不是传递指向它们的指针。即scanf("%d",arr2[i][j]);-->scanf("%d",&arr2[i][j]);。 -
一方面,您不能将函数中定义的数组变成全局变量。除此之外,为数组分配的存储空间在函数返回时被释放,并被其他函数重用。此外,您不能在全局范围内拥有可变长度数组。不清楚你甚至可以在全局范围内拥有指向可变长度数组的指针——我认为不能。
标签: c arrays variables global local