有人能告诉我这个代码的问题是什么,我该如何解决? (编译错误)谢谢! :)
#include <stdio.h>
int[] initArray(int arr[]);
void printArray(int arr[]);
int main()
{
int myGrades[2];
myGrades = initArray(myGrades);
printArray(myGrades);
return (0);
}
int[] initArray(int arr[])
{
arr[0] = 78;
arr[1] = 86;
return arr;
}
void printArray(int arr[])
{
printf("My grade in English is: %d!\n",arr[0]);
printf("My grade in History is %d! What an achievement!\n",arr[1]);
}
答案 0 :(得分:1)
您无法在c中分配数组,所以
int myGrades[2];
myGrades = initArray(myGrades);
无效,你根本无法分配给一个数组,但是将数组作为参数传递应该在函数内部修改它,因为指向数组的第一个元素的指针实际上是通过的,请参阅下一点来理解原因。
要修复此部分,只需删除作业
即可initArray(myGrades);
就够了。
您无法定义此类函数
int[] initArray(int arr[])
{
arr[0] = 78;
arr[1] = 86;
return arr;
}
引用this document, the C11 Standard Draft
6.7.6.3函数声明符(包括原型)
- 函数声明符不应指定函数类型或数组的返回类型 类型。
醇>
[]
语法不能用于函数返回类型,也作为函数参数,无论如何都会成为int
poitner,因此使用int arr[]
可能会产生误导,例如你可以尝试将sizeof
运算符应用于它,它将为您提供指针的大小。
将其更改为
void initArray(int *arr)
{
arr[0] = 78;
arr[1] = 86;
}
它应该编译。
尽管如此,返回的指针仅在您定义arr
的范围内有效,在您的程序中它在main()
中有效,所以如果您通过arr
那么几乎无处不在作为任何功能的参数,它会没事的。关键是你根本不需要返回它,因为原来的数组(你传递给函数的那个)被改变了。