需要帮助在C中本地将结构传递给函数吗
我正在构建一个处理结构的简单程序。逻辑很简单,但由于某种原因,我无法完全理解如何将结构传递给函数。我在main()中声明了结构。我在搜索网站时得到的印象是,实现这一点的唯一方法是创建一个头文件并以这种方式声明。这是真的吗需要帮助在C中本地将结构传递给函数吗,c,struct,declaration,C,Struct,Declaration,我正在构建一个处理结构的简单程序。逻辑很简单,但由于某种原因,我无法完全理解如何将结构传递给函数。我在main()中声明了结构。我在搜索网站时得到的印象是,实现这一点的唯一方法是创建一个头文件并以这种方式声明。这是真的吗 main() { struct Rect { double x; double y; char color; double width; doub
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
)内声明结构意味着它们仅在该函数内可用。在开始时声明它们,或在包含的另一个文件中声明它们,使它们成为“全局的”。