2017-05-25 58 views
0

我想知道C編程中struct tag_name的實際用法。沒有使用tag_name,我也得到了與使用tag_name一樣的輸出。我想要這個過程背後的確切原因。C編程中Struct標籤名稱的用法是什麼?

對於前:

//With tag_name st1 
struct st1 { int x; char c;}x={100,'a'},y={70,'e'}; 

//Without any tag_name 
struct { int x; char c;}x={100,'a'},y={70,'e'}; 

printf("x.x= %d \t x.c= %c \n",x.x,x.c); //Output: x.x=100 x.c=a 
printf("y.x= %d \t y.c= %c \n",y.x,y.c); //Output: y.x=70  y.c=e 

回答

4

在第一種情況:

struct st1 { 
    int x; 
    char c; 
} x = {100, 'a'}, y = {70, 'e'}; 

聲明與名稱struct st1一個類型,並且還創建了兩個對象,這種類型的,xy的。在第二種情況下不過

struct st1 obj1; 

:所以,你可以創建,每當你想這種類型的對象,像這樣

struct { 
    int x; 
    char c; 
} x = {100, 'a'}, y = {70, 'e'}; 

創建一個struct和兩個對象,xy,但你再次訪問struct。這意味着你不能創建任何這種類型的新對象。

+0

爲什麼我們不能訪問結構不TAG_NAME? – user6677473

+2

@ user6677473完全是因爲它沒有tag_name。你可以說'struct st1 obj1',但你不能說'struct obj2',這不是一個有效的聲明。 – Marievi

+0

沒有tag_name我們也在創建一個對象,對吧? – user6677473

0

如果你使用的標籤,您可以創建struct st1類型的多個變量(或類型從(例如,struct st1*)派生)後:

struct st1 z, *zp; 

過了一會兒:

struct { int x; char c;}x={100,'a'},y={70,'e'}; 

你永遠不能再次創建這種類型的變量。

雖然你可以這樣做:

struct { int x; char c;} z = {80, 'f'}; 
//same layout and member names 

就會有一種這是從X和Y的就走樣和類型檢查不同的關注。

該標籤允許您重用該類型。

(Typedefing的anomyous結構

typedef struct { int x; char c;} st1; 
st1 x,y,z; 

是另一種方式重新使用的類型。)