正文 第44章 結構體與共用體6(2 / 2)

else

while(new->num>p1->num)

p0=p1;

p1=p1->next;

new->next=p0->next;/*在其他位置插入*/

p0->next=new;

return(head);}

voidprint(structstu*head)

{structstu*p;

p=head;

if(head==NULL)

printf("listisempty\n");

else

while(p!=NULL)

printf("%d%s\n",p->num,p->name);

p=p->next;

voidmain()

structstu*head,*p;

intnum;

head=create();

print(head);

printf("Inputthedeletednumber:");

scanf("%d",&num);

head=delist(head,num);

print(head);

printf("Inputtheinsertednumberandname:");

p=(structstu*)malloc(LEN);

scanf("%d%s",&p->num,p->name);

head=insert(head,p);

print(head);

共用體也是一種能夠將不同類型的數據組合在一起的構造類型,但它與結構體不同。共用體中所有成員占用的是同一段存儲區域,因此共用體變量所占據的存儲空間不是其各成員所需存儲空間的總和,而是其成員中需要空間最大的那個成員所需的空間。另外,由於各個成員共用一段存儲空間,因此在同一時刻,隻能有一個成員起作用。

共用體類型的定義方法與結構體相似,隻需將關鍵字改為union即可。其一般格式為:

union共用體類型名

{數據類型成員名1;

數據類型成員名2;

數據類型成員名n;};

如:

uniondata

inti;

charc;

floatf;

};

以上定義了一個共用體類型data,該類型由3個成員構成,其中成員f所需的空間最大,為4個字節,因此該共用體類型變量在內存中需要占據的空間為4個字節。

共用體變量的定義方式與結構體變量的定義方式相似,也分為如下三種方式:

方式一:將共用體類型定義與共用體變量定義分開

uniondata

{inti;

charc[2];

floatf;

};

uniondatax,y;

方式二:在定義共用體類型的同時定義共用體變量

uniondata

inti;

charc[2];

floatf;

}x,y;

方式三:直接定義共用體類型的變量,不給出共用體類型名

union

inti;

charc[2];

floatf;

}x,y;