C - 警告(传递2个参数..)

时间:2014-04-13 10:23:13

标签: c arrays warnings

我的程序有2个警告,如何解决?

  1. Warning: expected 'int' but argument is of type 'int *'

  2. Warning: passing argument 2 of 'copie' makes integer from pointer without a cast

  3. Main.cpp的

    #include <stdio.h>
    #include <stdlib.h>
    
    void copie(int tableauOriginal[],int tableauCopie,int tailleTableau);
    
    int main(int argc, char  *argv[])
    {
        int tableauOriginal[4]={1,2,3,4};
        int tableauCopie[]= { };
        copie(tableauOriginal,tableauCopie,4);
        int i;
        for (i = 0; i < 4; i++)
            printf("Case: %d\n", tableauCopie[i]);
        return 0;
    }
    
    void copie(int tableauOriginal[],int tableauCopie,int tailleTableau)
    {
    
       int i ;
       for (i = 0; i < tailleTableau; i++)
          tableauCopie=tableauOriginal[i];
    }
    

5 个答案:

答案 0 :(得分:2)

这是一个错误:

int tableauCopie[]= { };

如果您的编译器接受它,那么它必须是编译器扩展 - 可能创建一个零大小的数组。然后,当您使用copie超出其边界时,会导致未定义的行为。

您必须指定尺寸:

int tableauCopie[4];

您可以使用= { 0 };对其进行零初始化,但这是不必要的,因为copie即将填写。

当然,copie函数应该接受数组为int tableauCopie[] - 而不是你当前的单个int;它的循环应该有tableauCopie[i] = tableauOriginal[i];;

答案 1 :(得分:1)

应该是

void copie(int tableauOriginal[],int tableauCopie[],int tailleTableau)

而不是

void copie(int tableauOriginal[],int tableauCopie,int tailleTableau)

答案 2 :(得分:0)

您已将tableauCopie声明为数组。并且在数组的情况下,只传递数组的基地址,因此您应该如下原型化您的函数。

void copie(int tableauOriginal [],int tableauCopie [],int tailleTableau);

void copie(int tableauOriginal [],int * tableauCopie,int tailleTableau);

答案 3 :(得分:0)

您应该将数组名称作为指针传递:

#include <stdio.h>
#include <stdlib.h>
void copie(int *tableauOriginal,int *tableauCopie,int tailleTableau);

int main(int argc, char  *argv[])
{
    int tableauOriginal[4]={1,2,3,4};
    int tableauCopie[4]= {0};
    copie(tableauOriginal,tableauCopie,4);
    int i;
    for (i = 0; i < 4; i++)
        printf("Case: %d\n", tableauCopie[i]);
    return 0;
}

void copie(int *tableauOriginal,int *tableauCopie,int tailleTableau)
{
   int i ;
   for (i = 0; i < tailleTableau; i++)
      tableauCopie[i]=tableauOriginal[i];
}

答案 4 :(得分:0)

应该如下所示tableauCopie是一个数组。

void copie(int tableauOriginal [],int tableauCopie [],int tailleTableau)   {

  int i ;
  for (i = 0; i < tailleTableau; i++)
    tableauCopie[i] = tableauOriginal[i];

}