當前位置:首頁 » 編程語言 » c語言結構體與共用體
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言結構體與共用體

發布時間: 2022-07-24 19:13:29

⑴ 在c語言裡面,共用體和結構體的區別是什麼

首先你說的很對 共同體的確占的內存要比結構體小

結構體佔用的內存空間,是其元素,占空間的總和,而共用體是,元素中佔用空間最大的元素的空間!所以共用體在空間開銷上要小一點!

但是既然是兩個不同的概念當然是不一樣的 要不就沒必要定義兩個名詞了

其實在共用體所用的內存中已經寫入了數據!當使用其它元素時!上次使用的內容將被覆蓋. 也就是說他使幾個不同類型的變數共佔一段內存(相互覆蓋),每次只有一個能使用

結構體則不然, 每個成員都會有存儲空間的,可以一起用.內部變數間是相互獨立的,c中的結構體和C++里的類很相像~~

⑵ C語言的結構體和共同體的區別是什麼

結構體(structure)是一種構造類型,它是由若干「成員」組成的。每一個成員可以是一個基本數據類型或者又是一個構造類型,而且每個成員的數據類型可以相同也可以不相同。共同體(union)將幾種不同的變數儲存在同一內存單元中,也就是使用覆蓋技術,幾個變數互相覆蓋,這種幾個不同的變數共同佔用一段內存的結構,可見二者最大的區別就是所佔用的內存,結構體(structure)所佔用的內存是分量內存之和,共同體(union)所佔用的內存是等於最大的分量的內存。
具體來說,結構體(structure)與共同體(union)主要有以下區別:
1.結構體(structure)與共同體(union)都是由多個不同的數據類型成員組成,
但在任何同一時刻,
共同體(union)中只存放了一個被選中的成員,
而結構體(structure)的所有成員都存在。在結構體(structure)中,各成員都佔有自己的內存空間,它們是同時存在的。一個結構體(structure)變數的總長度等於所有成員長度之和。在共同體(union)中,所有成員不能同時佔用它的內存空間,它們不能同時存在。共同體(union)變數的長度等於最長的成員的長度。
2.
對於共同體(union)的不同成員賦值,
將會對其它成員重寫,
原來成員的值就不存在了,
而對於結構體(structure)的不同成員賦值是互不影響的。

⑶ 共用體和結構體的區別

一、變數長度不同

結構體變數所佔內存長度是各成員占的內存長度之和,每個成員分別佔有其自己的內存單元。

共用體變數所佔的內存長度等於最長的成員的長度。

二、佔用空間不同

結構體是同時存在的,並一次佔用一段連續的內存空間;

而共用體則是多個共用成員佔用同一個開始的內存地址,同時他們只能存在一各,所以空間大小就是最大那個所需的空間,如果單從一個共用體來講,我們是不知道裡面存的是什麼內容,需要根據程序上下文才能確定。

三、分配儲存空間不同

結構體是由一系列具有相同類型或不同類型的數據構成的數據集合,簡稱結構。在C語言中,可以定義結構體類型,將多個相關的變數包裝成為一個整體來使用。在結構體中的變數,可以是相同、部分相同,或完全不同的數據類型。

結構體類型的定義只是由用戶構造了一個結構體,但定義結構體類型時系統並不為其分配存儲空間。

⑷ c語言結構體與共用體

#include<stdio.h>

#include<stdlib.h>

struct student{

int number;

char name[15];

double score[3];

};

void Display_All(struct student * p,int count);

void Display_Average(struct student * p_student,int count);

int cmp(const void *a,const void *b);

void main()

{

int i=0;

int count_student;

printf("how many student:\n");

scanf("%d",&count_student);

struct student * p_student=malloc(sizeof(struct student)

*count_student);

printf("please enter student's data:\n");

//從鍵盤輸入學生們的數據

for(i=0;i<count_student;i++)

{

printf("number:");

scanf("%d",&(p_student+i)->number);

printf("name:");

scanf("%s",(p_student+i)->name);

printf("first score:");

scanf("%lf",&(p_student+i)->score[0]);

printf("second score:");

scanf("%lf",&(p_student+i)->score[1]);

printf("third score:");

scanf("%lf",&(p_student+i)->score[2]);
}

//輸出成績報表

Display_All(p_student,count_student);

Display_Average(p_student,count_student);

}

int cmp(const void *a,const void *b)

{

return (((struct student*) a)->score[0]+((struct student*) a)-

>score[1]+((struct student*) a)->score[2])/3>(((struct student*) b)->score

[0]+((struct student*)b)->score[1]+((struct student*) b)->score[2])/3?-1:1;

}

//並輸出成績報表(包括每人的學號,姓名,三門成績及平均分數)

void Display_All(struct student* p_student,int count)

{

int i=0;

printf("number name first_score second_score third_score

average_score\n");
for(i=0;i<count;i++)

{

printf("%-8d%-10s%-13lf%-14lf%-14lf%-14lf\n",(p_student

+i)->number,(p_student+i)->name,(p_student+i)->score[0],(p_student+i)-

>score[1],(p_student+i)->score[2],((p_student+i)->score[0]+(p_student+i)-

>score[1]+(p_student+i)->score[2])/3);

}

}

//輸出平均分在前五名的學生姓名及平均成績

void Display_Average(struct student * p_student ,int count)

{

int i;

qsort(p_student,count,sizeof(struct student),cmp);

printf("name average_score\n");

for(i=0;i<2;i++)

{

printf("%-8s%-lf\n",(p_student+i)->name,((p_student+i)-

>score[0]+(p_student+i)->score[1]+(p_student+i)->score[2])/3);

}

}

⑸ C語言中結構體和共用體

你好,很高興看到自己可以解決的題目了!
首先應該知道union共用體的數據存儲結構,共用體就是所有的類型的數據數據共用同一段內存空間,像上面的z共用體,它所佔的內存是16位元組,而非17位元組,其中對於unsigned int 類數組i[4]佔有16個位元組,char類型佔有1個位元組,但是兩種類型的數據其實存儲都是從同一地址開始的,1~16位元組存儲數組變數,1位元組存儲char變數,這就說明1位元組中是兩種類型變數共用地址段,並且共用欄位的數據具有按位覆蓋的特點,了解了這些,下面來分析這道題。
首先對類存進行說明,加入開始時未初始化,用*表示未初始化的位,
開始運行時: : ****.....*****(前64bits)******....****(中間32bits)******.....****(後32bits0)
執行z.i [0]=0x39;後,: ****.....*****(前64bits)******....****(中間32bits)00000000,00000000,00000000,00111001.
執行z.i [1]=0x36;後,:****.....*****(前64bits)00000000,00000000,00000000,00110110, 00000000,00000000,00000000,00111001.
然後執行輸出語句,z.c,取最後一次執行union的結果,char是1個位元組,所以取它的後8位,結果為39(int類型的),在轉化為字元(ASCII),結果為9,。
我自己能力有限,也只能做這么很含糊的解說了,謝謝你的問題,共同進步!
開開心心!

⑹ 在C語言中,結構體和共用體的概念和兩者的區別是什麼啊

共用體內各成員公用同一塊內存空間。
結構體中各成員具有相互獨立的內存空間。
union exp_uni{
int a;
byte b[4];
}
上面的a,b公用同一塊內存,4位元組。

struct exp_stu{
int a;
byte b[4];
}
上面的a,b具有獨立的內存空間,一個exp_stu對象,佔8位元組空間。

⑺ 結構體和共用體在c語言中是怎麼用的

結構體和共用體其實都是用來描述一組由不同類型變數的集合,也就是說結構體和共用體中都可以同時存在int型、char型、float型等等!!
但是不同的是,結構體內所定義的每一個變數都有其自己獨立的存儲空間,互不幹涉,比如一個結構體中有一個int型、同時有一個char型,那麼它們是獨立的,總共佔用三個位元組空間。
而共用體內定義的每一個變數都共同享有同一個存儲空間,存儲空間的大小是佔用空間最大的那個一變數的大小。比如,我還是在裡面有一個int型和一個char型,那這個共用體就佔int型的2個位元組,加入我用共用體存入一個char型數據,我可以用int型來讀取,讀的是二進制數據。
呵呵呵呵,c語言是很久以前學的了,不知道這點記憶對不對,但是希望能幫得到你。