2013-03-11 90 views
-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; 
} 
+0

编辑您的标题是更多的信息,请.. – Maroun 2013-03-11 14:08:33

+0

@MarounMaroun,你有能力做自己,你知道:) – StoryTeller 2013-03-11 14:09:45

+0

@StoryTeller是的,但我想他知道他应该做的它(未来的):) – Maroun 2013-03-11 14:13:14

回答

0
  1. 您正在使用数组中的第一个元素调用函数copysect,而不是指向数组的指针。正确的调用是:

    copysect(arry,3,5); 
    
  2. 你可以动态地计算数组的差别。现在copysect函数的调用者必须知道起点和终点之间的差值为2

    int retar[end - start + 1] 
    
  3. 分配在for循环是错误的。您提领,而不是整个的值超出retar阵列

    retar[i]=ar[i+start]; 
    
  4. 当调用copysect功能,你只分配在miniarry的第一个元素的范围由取消引用数组函数返回时,阵列。

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

    void copysect(int ar[], int retar[], int start,int end,) 
    
+0

谢谢你的信息,我一定会用它,如果我可以问你一个更快的问题,我做了你在回答中建议的更改,我是分配给输入时获得关于我的代码第17行,指出miniarry是不兼容的类型的错误“INT [3]”从int现在我假定这是因为我的函数返回int,而不是阵列然而,当我除去int声明我的程序崩溃任何想法,为什么这可能是? – undone98 2013-03-11 14:53:55

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

好,copysect作为其第一个参数整数数组。

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

糟糕,您传递给它一个整数而不是数组。

+1

在其他古怪。 – user7116 2013-03-11 14:10:02

+3

哎呀!如果只有某件事可以告诉他。 – iamnotmaynard 2013-03-11 14:11:40

+1

@iamnotmaynard可悲的是,所有的编译器说的是'assign8p7.c:3:6:注:应为“INT *”,但参数的类型为“int''这是没有帮助。 – 2013-03-11 14:12:50