Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助在C中本地将结构传递给函数吗_C_Struct_Declaration - Fatal编程技术网

需要帮助在C中本地将结构传递给函数吗

需要帮助在C中本地将结构传递给函数吗,c,struct,declaration,C,Struct,Declaration,我正在构建一个处理结构的简单程序。逻辑很简单,但由于某种原因,我无法完全理解如何将结构传递给函数。我在main()中声明了结构。我在搜索网站时得到的印象是,实现这一点的唯一方法是创建一个头文件并以这种方式声明。这是真的吗 main() { struct Rect { double x; double y; char color; double width; doub

我正在构建一个处理结构的简单程序。逻辑很简单,但由于某种原因,我无法完全理解如何将结构传递给函数。我在main()中声明了结构。我在搜索网站时得到的印象是,实现这一点的唯一方法是创建一个头文件并以这种方式声明。这是真的吗

 main() {

    struct Rect {
            double x;
            double y;
            char color;
            double width;
            double height;

    };



    struct Rect a, b, *rec;
这就是我试图通过它的地方:

int chk_overlap(struct Rect *r1, struct Rect *r2) {
    if(((r1->x  + r1->width) >= r2->x) && ((r1->y) >= (r1->y - r2->height))){
            return 1;
    } else {
            return 0;
    }
}
这只是我尝试的一次迭代,当我像这样传递它时,我得到一个对不完整指针错误的解引用。我还试着将其声明为

typedef struct Rect {
            double x;
            double y;
            char color;
            double width;
            double height;

    } Rect;

Rect a, b, *rec;
将其作为

int chk_overlap(Rect *r1, Rect *r2) {
编辑:这就是我实际使用函数的地方

        int check = 0;
    check = check + chk_overlap(&a, &b);

您应该在main之前声明结构

struct Rect {
    double x;
    double y;
    char color;
    double width;
    double height;
}

/* Place here the function definitions */

int main (int argc, char *argv[]) {
    struct Rect a, b, *rec;
    ...
}

/* place here the function code */
由于您在main()内部声明它,因此在外部看不到它,因此函数无法识别它


除此之外,您调用函数(
函数(&a和&b)
)的方式看起来是正确的。

您是否也可以将代码发布到实际使用该函数的位置?很可能问题就在那里。@Antoh是的,对不起,刚刚编辑了它。另外,您说您在my main()中声明了结构
。你的意思是在与main相同的文件中,还是在main的主体中?因为您应该在前面声明它,如果它是第二个(如:
struct Rect{…}…int main(…){Rect&,b,*rec;…}
)。您在chk_重叠中是如何延迟的?@antoh我已经编辑以显示我传递到的整个函数,包括我如何取消引用的。此外,我还编辑了main()函数,以显示我在其中声明结构的确切位置谢谢!这似乎奏效了!所以,为了将来的参考,您在main之外声明的结构不需要附加“全局”吗?@AveryPfeiffer不客气。回答您的问题:否。在函数(如
main
)内声明结构意味着它们仅在该函数内可用。在开始时声明它们,或在包含的另一个文件中声明它们,使它们成为“全局的”。