2015-07-12 74 views
0

我有一个结构间隔和*re[]作为指向结构的指针数组。在函数insert()中,我能够将所需的数据存储在指针数组中,但是当我将指针数组返回为return re时,将显示一条警告,“从不兼容类型返回”。返回指针阵列

typedef struct interval 
{ 
int start; 
int end; 
}interval; 


interval *re[100000]; 

interval * insert(interval *intervals,interval newInterval,int sz, int *len) 
{ 
    int size_i=0; 
    for(size_i=0;size_i<=sz+1;size_i++) 
    { 
     re[size_i]=(interval *)malloc(sizeof(intervals[0])); 
    } 

    re[0]->start=intervals[0].start; 
    re[0]->end=intervals[0].end; 
    re[1]->start=intervals[1].start; 
    re[1]->end=intervals[1].end; 

    printf("%d,%d",re[0]->start,re[0]->end); 
    printf("\t%d,%d",re[1]->start,re[1]->end); 
    return re; //Statement where i am getting warning 
} 


int main(void) 
{ 

interval intervals[100]={{5,6},{8,10},{11,16},{20,24}}; 
interval newInterval={}; 
interval * ret; 
int sz=4,i; 
int *len; 
ret=insert(intervals,newInterval,sz,len); 

printf("\n%d,%d",ret[0].start,ret[0].end); 
printf("\n%d,%d",ret[1].start,ret[1].end); 
} 

main()欲接收在另一个指针的指针数组,这样我可以指针结构的返回阵列上进行迭代。 但我在这里得到一些地址。

+0

请在报告编译器的某些错误/警告输出时,尽量将其与屏幕上显示的内容完全一致。您对邮件的解释可能是错误的,因此您可以从实际邮件中更改完整的错误信息。 –

回答

1

insert()函数应返回interval**,因为您的re是一个指针数组。现在,你的代码是:

interval** insert(interval *intervals,interval newInterval,int sz, int *len) 
... 
interval** ret; 
... 
printf("\n%d,%d",ret[0]->start,ret[0]->end); 
printf("\n%d,%d",ret[1]->start,ret[1]->end); 
2

reinterval **型等你的函数的返回类型应该是interval **。应该做出相应的改变。

或者,

re已经宣布全球性的,所以它不需要从函数返回。

您的代码中还有其他几个区域可能会给出编译器警告。

  • interval newInterval={};应由interval newInterval;为标准禁止使用空初始化的牙套

  • len在功能使用的未初始化来代替。