-1

您好我正在尝试创建一个程序,该程序接受一个 7 元素数组作为参数并将该数组的第三个到第五个元素返回到一个较小的数组,但是我目前收到此错误

assign8p7.c: In function 'main':
assign8p7.c:18:2: warning: passing argument 1 of 'copysect' makes pointer from 
integer without a cast [enabled by default]
assign8p7.c:3:6: note: expected 'int *' but argument is of type 'int'

据我所知,警告有问题,我在参数中传递了一个数组,有人知道我该如何解决这个问题吗?也欢迎对我的代码提出任何其他建议。

#include <stdio.h>  

int *copysect(int ar[],int start,int end)
{
int i;
static int retar[3];
for(i = 0; i<3;i++)
{
    retar[i+start]=ar[i+start];
}
return retar;
}

int main(int argc, char const *argv[])
{
int arry[7] = {1,2,3,4,5,6,7};
int miniarry[3];
miniarry[0] = *copysect(arry[0],3,5);
return 0;
}
4

2 回答 2

5
int *copysect(int ar[],int start,int end)

好的,copysect它的第一个参数是一个整数数组。

miniarry[0] = *copysect(arry[0],3,5);

哎呀,你给它传递了一个整数而不是一个数组。

于 2013-03-11T14:08:32.547 回答
0
  1. 您正在copysect使用数组中的第一个元素调用函数,而不是指向数组的指针。正确的调用是:

    copysect(arry,3,5);
    
  2. 您可以动态计算数组的差异。现在 copysect 函数的调用者必须知道 start 和 end 之间的差是 2。

    int retar[end - start + 1]
    
  3. for 循环中的赋值是错误的。您正在取消引用超出 retar 数组范围的值

    retar[i]=ar[i+start];
    
  4. 调用函数时,您通过取消引用函数返回的数组而不是整个数组来copysect仅分配 中的第一个元素。miniarry

  5. 在函数中使用静态数组不是最好的主意(如果您多次调用该函数等,这将是有问题的)。相反,您可以在 elswhere 声明较小的数组并将其作为参数传递给函数。

    void copysect(int ar[], int retar[], int start,int end, )
    
于 2013-03-11T14:27:44.287 回答