数组代码编译错误[E]

时间:2016-01-09 12:21:22

标签: c arrays

有人能告诉我这个代码的问题是什么,我该如何解决? (编译错误)谢谢! :)

#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]);
 }

1 个答案:

答案 0 :(得分:1)

  1. 您无法在中分配数组,所以

    int myGrades[2];
    myGrades = initArray(myGrades);
    

    无效,你根本无法分配给一个数组,但是将数组作为参数传递应该在函数内部修改它,因为指向数组的第一个元素的指针实际上是通过的,请参阅下一点来理解原因。

    要修复此部分,只需删除作业

    即可
    initArray(myGrades);
    

    就够了。

  2. 您无法定义此类函数

    int[] initArray(int arr[])
    {
         arr[0] = 78;
         arr[1] = 86;
         return arr; 
    }
    
  3. 引用this document, the C11 Standard Draft

      

    6.7.6.3函数声明符(包括原型)

         
        
    1. 函数声明符不应指定函数类型或数组的返回类型   类型。
    2.   

    []语法不能用于函数返回类型,也作为函数参数,无论如何都会成为int poitner,因此使用int arr[]可能会产生误导,例如你可以尝试将sizeof运算符应用于它,它将为您提供指针的大小。

    将其更改为

        void initArray(int *arr)
        {
             arr[0] = 78;
             arr[1] = 86;
        }
    

    它应该编译。

    尽管如此,返回的指针仅在您定义arr的范围内有效,在您的程序中它在main()中有效,所以如果您通过arr那么几乎无处不在作为任何功能的参数,它会没事的。关键是你根本不需要返回它,因为原来的数组(你传递给函数的那个​​)被改变了。