好吧所以我试图让我的程序询问用户整数(一切正常)然后调用函数,每个数组元素增加5,我认为没问题?然后我需要在主程序中打印:添加了5的原始整数。有谁看到了什么问题?我的程序崩溃了
#include <stdio.h>
void FUN(int ARR2[]);
int main()
{
int i=0;
int ARR1[20];
printf("Please enter 20 integers.\n");
for(i=0; i<20; i++) // switch back to 20
{
scanf("%i", &ARR1[i]);
}
FUN(&ARR1[i]);
printf("The new numbers are: %i", ARR1[i]);
return 0;
}
void FUN(int ARR2[])
{
int i=0;
ARR2[20];
for(i=0;i<20;i++)
ARR2[i]+=5;
}
答案 0 :(得分:1)
当你到达这一行
FUN(&ARR1[i]);
您的i
变量的值为20,因此您正在访问ARR
中的第21个元素,这可能会导致访问冲突。如果用
FUN(ARR1);
并删除该行
ARR2[20];
从您的函数FUN
您可能会得到您期望的行为
答案 1 :(得分:1)
在第一次for循环后,i
得到的值为20
,但ARR1
的索引为0
到19
。因此,当您调用
FUN(&ARR1[i]);
您应该将其更改为
FUN(ARR1);
此外,在您的函数void FUN(int ARR2[])
中,您有
ARR2[20];
这也会导致此错误。删除它。
您也以错误的方式提供输出。你在做什么
printf("The new numbers are: %i", ARR1[i]);
也试图访问ARR1[20]
,再次造成问题。
您应该将其更改为
printf("The new numbers are: \n");
for ( i=0 ; i < 20 ; i++)
printf("%d\n", ARR1[i]);
您应该将代码更改为
#include <stdio.h>
void FUN(int ARR2[]);
int main()
{
int i=0;
int ARR1[20];
printf("Please enter 20 integers.\n");
for(i=0; i<20; i++) // switch back to 20
{
scanf("%i", &ARR1[i]);
}
FUN(ARR1);
printf("The new numbers are: \n");
for ( i=0 ; i < 20 ; i++)
printf("%d\n", ARR1[i]);
return 0;
}
void FUN(int ARR2[])
{
int i=0;
for(i=0;i<20;i++)
ARR2[i]+=5;
}