在main()或main()之外声明结构的位置?

案例1:main()之外声明的结构正常工作

 #include #include struct prod { int price,usold; }; int main() { struct prod *p,a; int billamt(struct prod *); int bill; printf("enter the values \n"); scanf("%d%d",&p->price,&p->usold); bill=billamt(p); printf("bill=%d",bill); getch(); } int billamt(struct prod *i) { int b; b=(i->price*i->usold); return b; } 

情况2:main()内部声明给出错误

[错误]输入’main():: prod’,没有用于通过链接[-fpermissive] *声明函数’int billamt(main():: prod *)’的链接

 #include #include int main() { struct prod { int price,usold; }; struct prod *p,a; int billamt(struct prod *); int bill; printf("enter the values \n"); scanf("%d%d",&p->price,&p->usold); bill=billamt(p); printf("bill=%d",bill); getch(); } int billamt(struct prod *i) { int b; b=(i->price*i->usold); return b; } 

main()main()之外声明结构的位置?

  1. 首先,我认为你的意思是“定义”,而不是“声明”。

  2. 其次,没有这样的规则 ,你可以定义你想要的任何地方。 这完全取决于定义的范围

    • 如果在main()定义结构,则范围仅限于main() 。 任何其他函数都看不到该定义,因此无法使用该结构定义。

    • 如果在全局范围中定义结构(即,在main()或任何其他函数之外),则该定义可全局使用,并且所有函数都可以查看和使用结构定义。

它必须关于作用域 ,当你在main函数中定义结构时,它只在main函数的范围内定义,所以billamt函数无法知道它。

结构是一个类似的数组,只有Array的主要区别只能包含相同类型的值,但结构可以有不同类型的值,所以如果你需要全局实现结构(全局意味着它也可以在任何其他函数中使用)在main之外定义它,如果你只想在main函数中使用你的结构,在它里面定义它。 快乐编码:-)