2015-07-13 59 views
5

例1:外main()聲明結構工作正常在main()或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()給錯誤

[錯誤]輸入 '主():: PROD' 無用於聲明函數'int billamt(main():: prod *)'的鏈接[-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; 
} 
+0

如果選項#1工作正常,但選項#2給出了一個錯誤,說它不能完成...我會說選擇#1! – rodrigo

回答

1

它要做的約作用域,當你定義main函數,那麼它在main功能的範圍僅限定內部結構,所以billamt功能無法瞭解它。

10

哪裏申報結構,在main()以內還是以外main()

  1. 第一件事,我想你指的是 「定義」,而不是 「申報」。

  2. 其次,沒有規則這樣,你可以定義你想要的任何地方。這全是關於定義的範圍

    • 如果定義裏面main()結構,範圍僅限於main()。任何其他函數都無法看到該定義,因此無法使用該結構定義。

    • 如果在全球範圍內定義的結構(即外main()或任何其他功能,對於這個問題),該定義是全球可用的,所有的功能都可以看到並利用結構定義。

1

結構是一個喜歡陣只在陣列的主要區別只能容納相同類型的值,但是如果你需要在全球範圍內實現結構(由全球我的意思是一個結構可以有不同類型的值它也可以在任何其他函數中使用)在主體之外定義它,並且如果你想僅在主函數中使用你的結構,那麼在其中定義它。 快樂編碼:-)

+0

這是最酷的答案。 (y)的 – lU5er