老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

怎么在C語言中自定義類型-創新互聯

本篇文章為大家展示了怎么在C語言中自定義類型,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

公司主營業務:成都網站建設、做網站、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯建站是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯建站推出三原免費做網站回饋大家。

一、初始結構體

結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量。


下面舉一個例子:

struct tag
{
 menber_list; //成員列表
}variable_list; //變量列表

例如我們使用結構體描述一臺電腦

struct computer
{
 int price;//價格
 char name[20];//名稱
 char brand[10];//品牌
 }computer; //需要注意的是最后一行的“ ;”不能丟哦,不然編譯器會報錯提示你。

結構成員的類型


結構成員可以是標量數組、指針、甚至可以是其他的結構體。

示例:pandas 是基于NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。

匿名結構體類型

//匿名結構體類型
struct
{
 int a;
 char b;
 float c;
}x;
struct
{
 int a;
 char b;
 float c;
}a[20], *p;

上面的代碼中結構體省略掉了結構體標簽,我們在添加一行代碼

p=&x;

當我們編譯時,會發現這樣兩個錯誤。

怎么在C語言中自定義類型


所以這樣是不可行的。

結構體的自引用

就像函數遞歸一樣,結構體也可以自己引用自己。他們的格式是這樣的。

struct Node
{
 int data;
 struct Node* next;
};

結構體變量的定義和初始化

struct stu
{
	char name[20];
	int age;
	
};
struct stu s = { "Geralt ",100};

利維亞的杰洛特,100歲!

結構體內存對齊

各成員變量存放的起始地址相對于結構的起始地址的偏移量必須為該變量的類型所占用的字節數的倍數 各成員變量在存放的時候根據在結構中出現的順序依次申請空間 同時按照上面的對齊方式調整位置 空缺的字節自動填充 同時為了確保結構的大小為結構的字節邊界數(即該結構中占用較大的空間的類型的字節數)的倍數,所以在為最后一個成員變量申請空間后 還會根據需要自動填充空缺的字節。


簡單的說就是:結構體的內存對齊是拿空間來換取時間的結果,提高了效率,浪費少許空間。


規則如下:

  1. 第一個成員在與結構體變量偏移量為0的地址處。

  2. 其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。
     對齊數 = 編譯器默認的一個對齊數 與 該成員大小的較小值。

  3. 結構體總大小為較大對齊數(每個成員變量都有一個對齊數)的整數倍。

  4. 如果嵌套了結構體的情況,嵌套的結構體對齊到自己的較大對齊數的整數倍處,結構體的整體大小就是所有較大對齊數(含嵌套結構體的對齊數)的整數倍。

VS編譯器中默認對齊數是8。

當然了,作為創建VS,Linux的我們是可以在C語言中自定義對齊數的。

我們可以使用#pragma這個預處理指令修改默認對齊數。

Eg:#pragma pack(4) //修改對齊數為4

結構體傳參

struct s
{
	int data[1000];
	int num;
};
struct s s = { {1,2,3,4},100 };
//結構體傳參
void print1(struct s s)
{
	printf("%d\n", s.num);
}
//結構體地址傳參
void print2(struct s* ps)
{
	printf("%d\n", ps->num);
}

int main()
{
	print1(s);
	print2(&s);




	return 0;

和函數傳參一樣,形參是實參的一份臨時拷貝,參數是需要壓棧,會有時間和空間上的系統開銷,如果傳遞的過程中結構體過大,就可能會導致系統開銷大,導致性能的下降。我們不如直接傳過去一份地址,再對它進行解引用操作符。

二、位段

位段與結構體不同的地方在于聲明的時候,1.位段的成員必須是 int、unsigned int 或signed int 。2.位段的成員名后邊有一個冒號和一個數字。

舉一個例子:


struct A
{
int _a:2;

int _b:5;
int _c:10;
int _d:30;
};
  1. 位段的成員可以是 int unsigned int signed int 或者是 char (屬于整形家族)類型

  2. 位段的空間上是按照需要以4個字節( int )或者1個字節( char )的方式來開辟的。

  3. 位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應該避免使用位段。

  4. 舉一個例子


struct S
{
char a:3;
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;

那么位段的空間是如何開辟的呢?一張圖搞定!


怎么在C語言中自定義類型

總的來說,位段和結構體相似,可以更好的節省空間,但是位段有跨平臺的問題存在。

 三、枚舉

枚舉枚舉,顧名思義就是把可能出現的取值一一列舉出來。


比如我們要描述一年的月份:


可以一一列舉,我們要描述計算機語言的類型,也可以一一列舉。


下面舉一個例子


代碼如下(示例):

enum ComputerLangue
	{
		C,
		Java,
		Python,

	};

每種結構體都有一定的優點,那么枚舉有什么優點呢?

  1. 增加代碼的可讀性和可維護性

  2. 和#define定義的標識符比較枚舉有類型檢查,更加嚴謹。

  3. 防止了命名污染(封裝)

  4. 便于調試

  5. 使用方便,一次可以定義多個常量

聯合(公用體)

聯合的特點是成員們公用同一塊空間,因此他們也可以叫共用體

代碼如下(示例):


//聯合類型的聲明

union Un 
{ 
 char c; 
 int i; 
};
//聯合變量的定義
union Un un; 
//計算連個變量的大小
printf("%d\n", sizeof(un));

三、 練習

在VC2013這款編譯器中,這個結構體所占的空間大小是多少字節?

typedef struct{
 int a;
 char b;
 short c;
 short d;
}AA_t;

答案是:12個字節


為什么呢?結構體判斷大小,一般向成員中最長的元素對齊。


怎么在C語言中自定義類型


在這4個結構成員中,最長的元素為a占四個字節。所以其他元素要向四對齊。a單獨占四個字節,b為char類型占一個字節,c為short和b一起占四個字節并且空出一個字節。剩下d占一個字節,空兩個字節。所以總占空間大小是4+1+2+2+3=12字節。

struct A
{
 int a;
 short b;
 int c;
 char d;
};
struct B
{
 int a;
 short b;
 char c;
 int d;
};

我們在來看一道題 :在32位系統環境,編譯選項為4字節對齊,那么sizeof(A)和sizeof(B)是( )


答案是:16、12

怎么在C語言中自定義類型


最長的結構成員為int 占4個字節,b占兩個字節,空下兩個字節,c占4個字節,d占一個字節,空3個字節。


怎么在C語言中自定義類型


最長的類型為int,a占4字節,b和c一起占三個字節,還空下一個字節,d占4字節。


所以sizeof(A)sizeof(B)分別是16 12.

上述內容就是怎么在C語言中自定義類型,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。


網頁標題:怎么在C語言中自定義類型-創新互聯
網站網址:http://www.xueling.net.cn/article/diejjh.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 日本视频三区 | 少妇人妻互换不带套 | 午夜精品一区二区三区在线视频 | YY111111少妇无码理论片 | 日本人妻出轨中文字幕 | 搜查官中文字幕一区二区 | FREEXXXXHD麻豆精品A∨ | 最近日本中文字幕 | 免费黄篇| 国产精品久国产精品 | 久久草av| 国产一卡一卡 | 国产精品18久久久久久白浆动漫 | 久久偷看各类WC女厕嘘嘘 | 亚洲人成色777777精品音频 | 扒开双腿疯狂进出爽爽爽视频 | 久久久国产99久久国产久一 | 日本娇小xxxⅹhd | 国产国一国二wwwwww | 人妻少妇无码专视频在线 | 暖暖成人免费视频 | 亚洲精品a在线观看 | 久久成人在线 | 国产精品丝袜久久久久久消防器材 | 91视视频在线观看入口直接观看 | 97久久久国产精品 | 免费看我的前半生 | 日韩国产综合 | 熟妇高潮一区二区三区 | 国自产在线精品免费 | 日韩一区精品视频一区二区 | 新包青天1995国语版 | 公车上玩弄白嫩少妇 | 精品国产a∨无码一区二区三区 | 钻石午夜影院 | 波多野结衣无码视频在线观看 | 色呦呦视频网站 | 火影大胸美女被黄网站 | 国产精品多P对白交换绿帽 久久久老司机 | 国产bdsm | 九九热线视频只有这里最精品 |