在Function,Compile错误中返回struct

时间:2013-12-05 00:46:34

标签: c function struct

我正在练习我的C编程语言技能,当我写这个代码编译器显示一堆错误但我没有看到这有什么问题。我在互联网上学到了这个代码,所以希望你能帮助我:)。

这是代码;

struct rect {

    int x1;
    int y1;
    int x2;
    int y2;
};



struct rect intersection(struct rect m, struct rect n) {
    struct rect intersection;
    if((n.x1 > m.x1) && (n.x1 < m.x2) && (n.y1 > m.y1 ) && (n.y1 < m.y2)){
                    rect intersection = {.x1=n.x1, .y1=n.y2, .x2=m.x2, .y2=m.y2};
                    return intersection;
                    }
    else if((m.x1 > n.x1) && (m.x1 < n.x2) && (m.y1 > n.y1 ) && (m.y1 < n.y2)){
                    rect intersection = {.x1=m.x1, .y1=m.y2, .x2=n.x2, .y2=n.y2};
                    return intersection;
                    }
    return NULL;
}

编译错误发生在     rect intersection = {。x1 = m.x1,.y1 = m.y2,.x2 = n.x2,.y2 = n.y2};     *错误:字段名称不在记录或联合初始值设定项

*error: incompatible types when returning type ‘int’ but ‘struct rect’ was expected
                     return intersection;
                     ^
*error: incompatible types when returning type ‘void *’ but ‘struct rect’ was expected
return NULL;
^

如果我遗漏了一些信息,请告诉我

谢谢你:)

3 个答案:

答案 0 :(得分:5)

您的函数的返回类型是struct rect。 NULL是指针或0.您应该返回struct rect或将函数的返回类型更改为struct rect*,并将指针更改为堆malloc'd struct rect

答案 1 :(得分:2)

 struct rect intersection = {.x1=n.x1, .y1=n.y2, .x2=m.x2, .y2=m.y2};//like this

 return NULL;//return intersection 

我的建议是使用指针:函数返回struct rect *,如果有,你可以在出现错误时返回NULL

答案 2 :(得分:1)

user2151287建议返回一个指针;但是你需要点东西,因为

// this code is wrong
struct rect *some_function()
{
    struct rect x = {stuff};
    return &x;
}

是未定义的行为 - 根据您的使用方式,它有可能继续工作,但最终它将无法正常工作,您将会非常困惑。

您可以返回一个空矩形(宽度和高度= 0):

struct rect x = {.x1=0, .y1=0, .x2=0, .y2=0};
return x;

顺便说一句,在这种情况下,intersection函数返回错误的结果: