我的编没有达到outArray函数。它在fillArray函数循环后停止。为什么会这样。它看起来很奇怪,因为它是简单的void函数,不应返回任何内容。这应该继续在main中运行命令。而且该程序像往常一样停止,没有任何问题和错误
#include <stdio.h>
#define N 100
int enterNofArray();
void fillArray(int n, float arr[N]);
void outArray(int n, float arr[N]);
int main()
{
float arr[N], sum = 0.0, average;
int n;
//input
n = enterNofArray();
//compute
fillArray(n, &arr[N]);
//output
outArray(n, &arr[N]);
return 0;
}
int enterNofArray()
{
int n;
printf("Enter amount of array...\n");
scanf("%d", &n);
while (n < 1 || n > N)
{
printf("Incorrect!!\n");
printf("Enter in range 1 - 100...\n");
scanf("%d", &n);
}
return n;
}
void fillArray(int n, float arr[N])
{
int num;
for(int i = 0; i < n; i++)
{
printf("Enter number for array[%d times left]...\n", n - i);
scanf("%d", &num);
arr[i] = num;
}
}
void outArray(int n, float arr[N])
{
for(int i = 0; i < n; i++)
{
printf("%f ", arr[i]);
}
}
答案 0 :(得分:3)
&arr[N]
是指包含数组中第N个元素(索引之外!!)的内存位置(或左值)。
该代码调用未定义行为(UB)。
因此,您实际上并没有将整个数组传递给函数,而只是试图传递该数组的第N个元素...了解有关该表达式here的更多信息。
更改此:
fillArray(n, &arr[N]);
outArray(n, &arr[N]);
对此:
fillArray(n, arr);
outArray(n, arr);
问题是您的代码n
已损坏,在调用fillArray
函数之后包含垃圾值。结果,在调用outArray
函数时,n
的值为垃圾值,这导致了不受控制的for循环,最终导致循环的次数远远超出了数组的限制,最终访问了您所需要的内存不拥有,从而导致细分错误。
不是造成问题的原因,但是我建议您在scanf("%f", &num);
函数中执行fillArray
(当然,在将num
声明为float
之后),因为您想要填充浮点数数组。
答案 1 :(得分:0)
因为执行此操作时会发送双指针:
fillArray(n,&arr [N]); outArray(n,&arr [N]);
看起来像:
fillArray(n,** arr); outArray(n,** arr);
当您使用Structures时,会发生如此多的事情。