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

时间:2015-07-13 09:54:00

标签: c struct

案例1:main()之外宣布的结构正常

#include<stdio.h>
#include<conio.h>
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()内声明错误

  

[错误]输入&#39; main():: prod&#39;没有用于声明函数的链接&#39; int billamt(main():: prod *)&#39;与链接[-fpermissive] *

#include<stdio.h>
#include<conio.h>
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;
}

3 个答案:

答案 0 :(得分:12)

  

main()内或main()之外申报结构的位置?

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

  2. 其次,没有规则,您可以在任何地方定义。这完全与定义的范围有关。

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

    • 如果您在全局范围内定义结构(例如,在main()之外或任何其他函数),则该定义全局可用,并且所有函数都可以查看< / em>并使用结构定义。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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