函数返回结构中的错误

0 c pointers structure function

#include<stdio.h>
#include "amicablenumber.h"

int i,j;
struct amicable         
{
    int **amicablePair;
    int size;
};

main()
{

int startnum = 250;
int endnum = 1000;
struct amicable* ami;

ami = getAmicablePairs(startnum, endnum);   

printf("{");
for(int i = 0; i<ami->size; i++)
{
printf("{%d, %d}",ami->amicablePair[i][0], ami->amicablePair[i][1]);
}
printf("}");
}

amicable *getAmicablePairs(int startnum,int endnum)
{
    int size=0;
    int sumfactors(int);
    amicable record;
 for(i=startnum;i<=endnum;i++)
 {
 for(j=endnum;j>=startnum;j--)
 {
 if((sumfactors(i)==j)&&(sumfactors(j)==i) && (i!=j))
 {
  record.amicablePair[size][0]=i;
  record.amicablePair[size][1]=j;

  size++;
 }}}
 record.size=size;
 return record;
 }

  int sumfactors(int number)
 {
 int sum=0;
 for(i=1;i<number;i++)
 {
 if(number%i==0)
 sum +=i;
 }
 return sum;
 }
Run Code Online (Sandbox Code Playgroud)

在上面的代码我得到一个错误

无法将友好转换为友好*作为回报

Ric*_*dle 8

getAmicablePairs声明返回一个指向的指针amicable:

amicable *getAmicablePairs(...)
Run Code Online (Sandbox Code Playgroud)

但你然后尝试返回amicable:

return record;
Run Code Online (Sandbox Code Playgroud)

而不是一个指针.

请注意,一个"明显"的修复,即返回指针record:

return &record;
Run Code Online (Sandbox Code Playgroud)

将无法正常工作,因为你将返回一个指向一个即将返回的变量的指针getAmicablePairs.相反,你需要创建一个记录使用malloc并返回; 这样的事情:

amicable *record = (amicable*) malloc(sizeof(amicable));
Run Code Online (Sandbox Code Playgroud)

您需要将所有内容更改record.record->.

另请注意,您正在写入amicablePair结构的成员而不分配它 - 这将导致崩溃.你需要mallocamicablePair还有amicable.


Jas*_*ams 6

你正在返回一个(友好的*) - 一个指向友好的指针,但你的函数创建一个(友好的)(不是一个pinter).

而不是宣布

amicable record;

你需要这样做(或相当于):

amicable *record = (amicable *) malloc(sizeof(amicable));

然后通过"record->"而不是"record"访问.

注意:使用上述方法,您需要在完成上述分配后释放().