嗨我试图创建一个接受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;
}
答案 0 :(得分:5)
int *copysect(int ar[],int start,int end)
好的,copysect
将第一个参数作为整数数组。
miniarry[0] = *copysect(arry[0],3,5);
糟糕,你传递了一个整数而不是一个数组。
答案 1 :(得分:0)
您正在使用数组中的第一个元素调用函数copysect
,而不是指向数组的指针。正确的电话是:
copysect(arry,3,5);
您可以动态计算数组的差异。现在copysect函数的调用者必须知道start和end之间的差异是2。
int retar[end - start + 1]
for循环中的赋值错误。您正在取消引用超出retar数组范围的值
retar[i]=ar[i+start];
调用copysect
函数时,通过取消引用函数返回的数组而不是整个数组,只分配miniarry
中的第一个元素。
在函数中使用静态数组并不是最好的想法(如果你多次调用函数会出现问题,等等)。相反,您可以声明较小的数组elswhere并将其作为参数传递给函数。
void copysect(int ar[], int retar[], int start,int end, )