国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué))

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1.結(jié)構(gòu)體

1.1結(jié)構(gòu)體的介紹

1.2結(jié)構(gòu)體的聲明

1.3特殊聲明(匿名結(jié)構(gòu)體類(lèi)型)

1.4結(jié)構(gòu)體自引用

1.5結(jié)構(gòu)體變量的定義和初始化

1.6結(jié)構(gòu)體內(nèi)存對(duì)齊

1.7修改默認(rèn)對(duì)其數(shù)

2.位段

2.1什么是位段

2.2位段的內(nèi)存分配

3.枚舉

3.1枚舉的定義

3.2枚舉的優(yōu)點(diǎn)

4.聯(lián)合體(共用體)

4.1聯(lián)合體類(lèi)型的定義

4.2聯(lián)合體的特點(diǎn)

?4.3聯(lián)合體大小的計(jì)算


什么是自定義類(lèi)型?

在C語(yǔ)言中,我們可以使用結(jié)構(gòu)體(Struct),枚舉(Enum),聯(lián)合體(Union)來(lái)創(chuàng)建自定義的類(lèi)型。

1.結(jié)構(gòu)體

1.1結(jié)構(gòu)體的介紹

結(jié)構(gòu)體(Struct):結(jié)構(gòu)體是一種用戶(hù)定義的數(shù)據(jù)類(lèi)型,用于將不同類(lèi)型的數(shù)據(jù)組合在一起,形成一個(gè)新的復(fù)合類(lèi)型。結(jié)構(gòu)體由一組成員(member)組成,每個(gè)成員可以是不同的數(shù)據(jù)類(lèi)型,如整型、字符型、浮點(diǎn)型、指針等。結(jié)構(gòu)體的定義使用?struct?關(guān)鍵字,然后指定結(jié)構(gòu)體的名稱(chēng)以及成員列表。

1.2結(jié)構(gòu)體的聲明

struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20]
};

在上述代碼中,我們定義了一個(gè)名為student的結(jié)構(gòu)體,包含了一個(gè)整形類(lèi)型和三個(gè)字符類(lèi)型的數(shù)組。

1.3特殊聲明(匿名結(jié)構(gòu)體類(lèi)型)

struct
{
	int a;
	float b;
	float c;
}x;

在上述代碼中,省略了結(jié)構(gòu)體的標(biāo)簽——這就是匿名結(jié)構(gòu)體類(lèi)型。

1.4結(jié)構(gòu)體自引用

我們可以在結(jié)構(gòu)體中包含一個(gè)結(jié)構(gòu)體,如果包含的這個(gè)結(jié)構(gòu)體是該結(jié)構(gòu)體本身的結(jié)構(gòu)體指針即為結(jié)構(gòu)體的自引用。

struct student
{
	int age;
	char name[20];
	struct student* s1;
};

1.5結(jié)構(gòu)體變量的定義和初始化

struct student
{
	int age;
	char name[20];
}s1,s2;//在聲明結(jié)構(gòu)體類(lèi)型時(shí)定義變量s1,s2

struct student s3;//定義結(jié)構(gòu)體變量s3


struct point
{
	int x;
	int y;
}p1={1,1};//結(jié)構(gòu)體嵌套初始化


struct point p2 = { 1,2 };//初始化

1.6結(jié)構(gòu)體內(nèi)存對(duì)齊

結(jié)構(gòu)體內(nèi)存對(duì)齊是用來(lái)計(jì)算結(jié)構(gòu)體的大小的

如何計(jì)算?

首先得掌握結(jié)構(gòu)體的對(duì)齊規(guī)則:
1. 第一個(gè)成員在與結(jié)構(gòu)體變量偏移量為0的地址處。
2. 其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。
對(duì)齊數(shù) = 編譯器默認(rèn)的一個(gè)對(duì)齊數(shù) 與 該成員大小的較小值。
VS中默認(rèn)的值為8
Linux中沒(méi)有默認(rèn)對(duì)齊數(shù),對(duì)齊數(shù)就是成員自身的大小
3. 結(jié)構(gòu)體總大小為最大對(duì)齊數(shù)(每個(gè)成員變量都有一個(gè)對(duì)齊數(shù))的整數(shù)倍。
4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的最大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整
體大小就是所有最大對(duì)齊數(shù)(含嵌套結(jié)構(gòu)體的對(duì)齊數(shù))的整數(shù)倍
。

實(shí)例:

struct S1
{
	char c1;
	int i;
	char c2;
};
int main()
{
	printf("%d \n", sizeof(struct S1));
	return 0;
}

C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

?C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

為什么存在內(nèi)存對(duì)齊?
大部分的參考資料都是如是說(shuō)的:
1. 平臺(tái)原因(移植原因):
不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特
定類(lèi)型的數(shù)據(jù),否則拋出硬件異常。
2. 性能原因:
數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊。
原因在于,為了訪問(wèn)未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需要一次訪
問(wèn)。

總體來(lái)說(shuō):
結(jié)構(gòu)體的內(nèi)存對(duì)齊是拿空間來(lái)?yè)Q取時(shí)間的做法

1.7修改默認(rèn)對(duì)其數(shù)

#pragma pack(1)//設(shè)置默認(rèn)對(duì)齊數(shù)為1
struct S3
{
	double d;
	char c;
	int i;
};
struct S4
{
	char c1;
	struct S3 s3;
	double d;
};
#pragma pack ()//取消設(shè)置默認(rèn)對(duì)齊數(shù),還原為默認(rèn)

2.位段

2.1什么是位段

位段(Bitfields)是C語(yǔ)言中一種用于定義結(jié)構(gòu)體成員的技術(shù),它允許我們對(duì)結(jié)構(gòu)體中的數(shù)據(jù)進(jìn)行位級(jí)別的控制。

位段的目的是在結(jié)構(gòu)體成員中存儲(chǔ)各個(gè)字段(或位)的數(shù)據(jù),并利用較少的內(nèi)存空間。通常,在處理一些較小范圍的整數(shù)值時(shí),使用完整的字節(jié)或更大的數(shù)據(jù)類(lèi)型可能會(huì)浪費(fèi)內(nèi)存。

位段的聲明和結(jié)構(gòu)體是類(lèi)似的,有兩個(gè)不同:

1.位段的成員必須是 int、unsigned int 或signed int 。
2.位段的成員名后邊有一個(gè)冒號(hào)和一個(gè)數(shù)字

比如:

struct student
{
	int _a : 2;
	int _b : 5;
	int _c : 10;
	int _d : 30;
};

student就是一個(gè)位段類(lèi)型。那student的大小呢?

C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

2.2位段的內(nèi)存分配

1. 位段的成員可以是 int unsigned int signed int 或者是 char (屬于整形家族)類(lèi)型
2. 位段的空間上是按照需要以4個(gè)字節(jié)( int )或者1個(gè)字節(jié)( char )的方式來(lái)開(kāi)辟的。
3. 位段涉及很多不確定因素,位段是不跨平臺(tái)的,注重可移植的程序應(yīng)該避免使用位段。

實(shí)例:

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語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

3.枚舉

3.1枚舉的定義

enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Sex//性別
{
MALE,
FEMALE,
SECRET
};
enum Color//顏色
{
RED,
GREEN,
BLUE
};

以上定義的 enum Day , enum Sex , enum Color 都是枚舉類(lèi)型。
{}中的內(nèi)容是枚舉類(lèi)型的可能取值,也叫 枚舉常量 。
這些可能取值都是有值的,默認(rèn)從0開(kāi)始,依次遞增1,當(dāng)然在聲明枚舉類(lèi)型的時(shí)候也可以賦初值。
例如:

enum Color//顏色
{
RED=1,
GREEN=2,
BLUE=4
};

3.2枚舉的優(yōu)點(diǎn)

為什么使用枚舉?
我們可以使用 #define 定義常量,為什么非要使用枚舉?
枚舉的優(yōu)點(diǎn):
1. 增加代碼的可讀性和可維護(hù)性
2. 和#define定義的標(biāo)識(shí)符比較枚舉有類(lèi)型檢查,更加嚴(yán)謹(jǐn)。
3. 便于調(diào)試
4. 使用方便,一次可以定義多個(gè)常量

4.聯(lián)合體(共用體)

聯(lián)合體是一種特殊的數(shù)據(jù)類(lèi)型,允許在相同的內(nèi)存位置存儲(chǔ)不同類(lèi)型的數(shù)據(jù)。與結(jié)構(gòu)體不同的是,聯(lián)合體中的各個(gè)成員共享相同的內(nèi)存空間。

4.1聯(lián)合體類(lèi)型的定義

//聯(lián)合體類(lèi)型的聲明
union Un
{
	char c;
	int i;
};

int main()
{
	//聯(lián)合體變量的定義
	union Un un;
	//計(jì)算聯(lián)合體變量的大小
	printf("%d\n", sizeof(un));
	//打印結(jié)果為4
}

4.2聯(lián)合體的特點(diǎn)

聯(lián)合的成員是共用同一塊內(nèi)存空間的,這樣一個(gè)聯(lián)合變量的大小,至少是最大成員的大?。ㄒ?yàn)槁?lián)
合至少得有能力保存最大的那個(gè)成員)。

union Un

{
	int i;
	char c;
};
int main()
{
	union Un un;
	printf("%d \n", &(un.i));
	printf("%d \n", &(un.c));

	un.i = 1;
	un.c = 2;
	printf("%d \n", un.i);
	return 0;
}

C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

?實(shí)例:判斷當(dāng)前機(jī)器的大小端?

int Pd()
{
	union
	{
		int i;
		char c;
	}un = { .i = 1 };
	return un.c;
}
int main()

{
	int ret = Pd();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué)),C language learning,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

?4.3聯(lián)合體大小的計(jì)算

聯(lián)合的大小至少是最大成員的大小。
當(dāng)最大成員大小不是最大對(duì)齊數(shù)的整數(shù)倍的時(shí)候,就要對(duì)齊到最大對(duì)齊數(shù)的整數(shù)倍。
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-566079.html

到了這里,關(guān)于C語(yǔ)言自定義類(lèi)型詳解(保姆級(jí)教學(xué))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 詳解C語(yǔ)言自定義類(lèi)型(結(jié)構(gòu)體,枚舉,聯(lián)合)

    詳解C語(yǔ)言自定義類(lèi)型(結(jié)構(gòu)體,枚舉,聯(lián)合)

    ?? 作者簡(jiǎn)介 :RO-BERRY 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫(kù)等等一系列知識(shí),對(duì)純音樂(lè)有獨(dú)特的喜愛(ài) ?? 日后方向 : 偏向于CPP開(kāi)發(fā)以及大數(shù)據(jù)方向,如果你也感興趣的話歡迎關(guān)注博主,期待更新 ??結(jié)構(gòu)體是一些值的集合,這些值稱(chēng)為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不

    2024年02月16日
    瀏覽(19)
  • C語(yǔ)言——自定義類(lèi)型詳解[結(jié)構(gòu)體][枚舉][聯(lián)合體]

    C語(yǔ)言——自定義類(lèi)型詳解[結(jié)構(gòu)體][枚舉][聯(lián)合體]

    我打算把結(jié)構(gòu)體、枚舉、聯(lián)合體的重點(diǎn)內(nèi)容總結(jié)一下,方便后期復(fù)習(xí)的時(shí)候能夠更快,更準(zhǔn)確的去拾取遺忘的知識(shí)。也希望能給大家起到借鑒的作用,不足的地方,請(qǐng)多多包涵。(不足的地方,也希望大家能夠指出來(lái)) 結(jié)構(gòu)體是一些值的集合,這些集合稱(chēng)為成員變量,結(jié)構(gòu)體

    2024年02月13日
    瀏覽(24)
  • C語(yǔ)言進(jìn)階,第4節(jié)-自定義類(lèi)型詳解(結(jié)構(gòu)體

    C語(yǔ)言進(jìn)階,第4節(jié)-自定義類(lèi)型詳解(結(jié)構(gòu)體

    1. 結(jié)構(gòu)的聲明 //描述一個(gè)學(xué)生 //匿名結(jié)構(gòu)體類(lèi)型 編譯器會(huì)把上面兩種聲明當(dāng)做完全不同的兩個(gè)類(lèi)型 2. 結(jié)構(gòu)體自引用 //正確的自引用方式: 注意: 3. 結(jié)構(gòu)體變量定義和初始化 //定義 //初始化 4. 結(jié)構(gòu)體內(nèi)存對(duì)齊 //結(jié)構(gòu)體對(duì)齊規(guī)則 : //例 1 //例 2 //為什么存在內(nèi)存對(duì)齊?( 結(jié)構(gòu)體

    2024年02月16日
    瀏覽(19)
  • 【Go 基礎(chǔ)篇】Go語(yǔ)言結(jié)構(gòu)體詳解:打開(kāi)自定義類(lèi)型的大門(mén)

    【Go 基礎(chǔ)篇】Go語(yǔ)言結(jié)構(gòu)體詳解:打開(kāi)自定義類(lèi)型的大門(mén)

    嗨,Go語(yǔ)言學(xué)習(xí)者們!在編程的世界里,數(shù)據(jù)是核心,而結(jié)構(gòu)體(Struct)是一種能夠幫助我們更有組織地存儲(chǔ)和操作數(shù)據(jù)的重要工具。在本篇博客中,我們將深入探討Go語(yǔ)言中結(jié)構(gòu)體的概念、定義、初始化、嵌套、方法以及與面向?qū)ο缶幊痰年P(guān)系,帶你逐步領(lǐng)略結(jié)構(gòu)體的魅力。

    2024年02月10日
    瀏覽(20)
  • 保姆級(jí)教學(xué) - C語(yǔ)言 之 動(dòng)態(tài)內(nèi)存管理

    保姆級(jí)教學(xué) - C語(yǔ)言 之 動(dòng)態(tài)內(nèi)存管理

    ? ?? 個(gè)人主頁(yè):白子寰 ?? 分類(lèi)專(zhuān)欄: 魔法指針,進(jìn)階C++,C語(yǔ)言,C語(yǔ)言題集,C語(yǔ)言實(shí)現(xiàn)游戲 ?? 希望得到您的訂閱和支持~ ?? 堅(jiān)持創(chuàng)作博文(平均質(zhì)量分79.9+),分享更多關(guān)于深度學(xué)習(xí)、C/C++領(lǐng)域的優(yōu)質(zhì)內(nèi)容!(希望得到您的關(guān)注~)? 目錄 為什么會(huì)有動(dòng)態(tài)內(nèi)存的分配 ?mal

    2024年04月09日
    瀏覽(26)
  • 【C語(yǔ)言】簡(jiǎn)單貪吃蛇實(shí)現(xiàn)保姆級(jí)教學(xué)?。?!

    【C語(yǔ)言】簡(jiǎn)單貪吃蛇實(shí)現(xiàn)保姆級(jí)教學(xué)?。?!

    關(guān)注小莊 頓頓解饞?(?? ? ??)? 新年快樂(lè)呀小伙伴 引言: 小伙伴們應(yīng)該都有一個(gè)做游戲的夢(mèng)吧?今天讓小莊來(lái)用C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)一下我們的童年邪典貪吃蛇,順便鞏固我們的C語(yǔ)言知識(shí),請(qǐng)安心食用~ 如下是我們將實(shí)現(xiàn)的效果 請(qǐng)看vcr 平時(shí)我們運(yùn)行程序彈出的黑框框就是控

    2024年02月19日
    瀏覽(16)
  • C/C++之分文件寫(xiě)靜態(tài)通訊錄詳解(保姆級(jí)教學(xué))

    個(gè)人主頁(yè):點(diǎn)我進(jìn)入主頁(yè) 專(zhuān)欄分類(lèi):C語(yǔ)言初階? ? ??C語(yǔ)言程序設(shè)計(jì)————KTV? ? ? ?C語(yǔ)言小游戲? ? ?C語(yǔ)言進(jìn)階 C語(yǔ)言刷題 歡迎大家點(diǎn)贊,評(píng)論,收藏。 一起努力,一起奔赴大廠。 目錄 1. 前言 2.主函數(shù) 3.增加函數(shù)? ?4.位置查找函數(shù) 5.刪除函數(shù)? 6.查找函數(shù)? 7. 修改函數(shù)

    2024年02月07日
    瀏覽(17)
  • C語(yǔ)言中求x的n次方:從入門(mén)到實(shí)踐(保姆式教學(xué))
  • Hive——DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)句用法詳解

    Hive——DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)句用法詳解

    IF NOT EXISTS :可選參數(shù), 表示如果數(shù)據(jù)庫(kù)已經(jīng)存在,則不會(huì)創(chuàng)建,避免出現(xiàn)重復(fù)創(chuàng)建的情況。 COMMENT :可選參數(shù), 用于添加數(shù)據(jù)庫(kù)的注釋 。 LOCATION :可選參數(shù), 指定數(shù)據(jù)庫(kù)的存儲(chǔ)路徑 WITH DBPROPERTIES :可選參數(shù), 用于設(shè)置數(shù)據(jù)庫(kù)的額外屬性 。 示例: 創(chuàng)建一個(gè)名為\\\"mydataba

    2024年04月27日
    瀏覽(25)
  • 【大數(shù)據(jù)之Hive】九、Hive之DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言

    【大數(shù)據(jù)之Hive】九、Hive之DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言

    [ ] 里的都是可選的操作。 語(yǔ)法: 如: 如果不指定路徑則默認(rèn)路徑為:${hive.metastore.warehouse.dir}/database_name.db (1)查看數(shù)據(jù)庫(kù) 語(yǔ)法: 模糊匹配:like通配表達(dá)式說(shuō)明:*表示任意個(gè)任意字符,|表示或的關(guān)系。 如: (2)查看數(shù)據(jù)庫(kù)信息 語(yǔ)法: [extended]:是否要展示更詳細(xì)信息

    2024年02月12日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包