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

椋鳥C語言筆記#31:結(jié)構(gòu)體(聯(lián)合體)嵌套、柔性數(shù)組

這篇具有很好參考價值的文章主要介紹了椋鳥C語言筆記#31:結(jié)構(gòu)體(聯(lián)合體)嵌套、柔性數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

萌新的學(xué)習(xí)筆記,寫錯了懇請斧正。


目錄

結(jié)構(gòu)體(聯(lián)合體)嵌套

嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)不創(chuàng)建變量(匿名)

嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)創(chuàng)建變量(非匿名)

嵌套初始化

柔性數(shù)組

柔性數(shù)組的使用


結(jié)構(gòu)體(聯(lián)合體)嵌套

結(jié)構(gòu)體、聯(lián)合體可以嵌套,也就是說結(jié)構(gòu)體(聯(lián)合體)的成員也可以是結(jié)構(gòu)體(聯(lián)合體)

嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)不創(chuàng)建變量(匿名)

如果嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)不創(chuàng)建變量(匿名),內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)的成員會被認(rèn)為是外圍結(jié)構(gòu)體(聯(lián)合體)的成員,如果外圍結(jié)構(gòu)體(聯(lián)合體)也是匿名的,那么就遞歸應(yīng)用此規(guī)則:

#include <stdio.h>

struct
{
	int x;
	struct
	{
		int y;
		union
		{
			int z;
			char c;
		};
	};
} a;


int main()
{
	a.z = 1;
	printf("%d\n", a.c);
	return 0; 
}

注意:此匿名非彼匿名,結(jié)構(gòu)體類型依舊可以有名字,但是不能內(nèi)嵌結(jié)構(gòu)體只能有其聲明部分而不能在后面加成員變量名

嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)創(chuàng)建變量(非匿名)

當(dāng)嵌套時內(nèi)嵌結(jié)構(gòu)體(聯(lián)合體)創(chuàng)建變量(非匿名),則需要通過訪問操作符先訪問這個內(nèi)嵌結(jié)構(gòu)體類型的成員,再訪問其中的成員,如果外圍結(jié)構(gòu)體(聯(lián)合體)也是非匿名結(jié)構(gòu)體,那么就遞歸應(yīng)用此規(guī)則:

#include <stdio.h>


struct S1
{
	struct S2
	{
		union U1
		{
			union U2
			{
				int n1;
				int n2;
			} u2;
			int n3;
		} u1;
		int n4;
	} s2;
	int n5;
} s1;

int main()
{
	s1.s2.u1.u2.n1 = 1;
	printf("%d\n", s1.s2.u1.n3);
	return 0; 
}

同樣的,這里的非匿名也與匿名結(jié)構(gòu)體無關(guān),結(jié)構(gòu)體類型也可以沒有命名,但是內(nèi)嵌結(jié)構(gòu)體后面應(yīng)該加成員變量名

嵌套初始化

這邊C官網(wǎng)上講的足夠清楚了,鏈接在此

柔性數(shù)組

在C99標(biāo)準(zhǔn)以后,結(jié)構(gòu)體的最后一個成員被允許是一個未知大小的數(shù)組,這就叫柔性數(shù)組

這個未知大小當(dāng)然不是真的未知,而是“可動態(tài)分配”

比方說:

struct S
{
	int i;
	long arr[];
};

或者寫成:

struct S
{
	int i;
	long arr[0];
};

特點:

  • 柔性數(shù)組成員前必須至少包含一個其他成員
  • 用sizeof返回包含柔性數(shù)組的結(jié)構(gòu)體的大小時,忽略柔性數(shù)組后正常計算
  • 包含柔性數(shù)組的結(jié)構(gòu)體不能作為數(shù)組成員或者其他結(jié)構(gòu)體的成員
  • 如果創(chuàng)建包含柔性數(shù)組的結(jié)構(gòu)體變量最好使用動態(tài)內(nèi)存分配(見下)
柔性數(shù)組的使用

如下便是給柔性數(shù)組分配了40個長整型的空間文章來源地址http://www.zghlxwxcb.cn/news/detail-782938.html

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
	int i;
	long arr[];
} stt;

int main()
{
	stt* p = (stt*)malloc(sizeof(stt) + 40 * sizeof(long));
	if (p == NULL)
	{
		perror("malloc-p");
		exit(EXIT_FAILURE);
	}

	p->i = 40;
	for (int i = 0; i < 40; i++)
		p->arr[i] = i + 1;
	for (int i = 0; i < 40; i++)
		printf("%2ld\t", (*p).arr[i]);

	free(p);
	p = NULL;
	return 0;
}

到了這里,關(guān)于椋鳥C語言筆記#31:結(jié)構(gòu)體(聯(lián)合體)嵌套、柔性數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • C語言學(xué)習(xí)(三十一)---結(jié)構(gòu)體、聯(lián)合體的在內(nèi)存中的存儲

    C語言學(xué)習(xí)(三十一)---結(jié)構(gòu)體、聯(lián)合體的在內(nèi)存中的存儲

    在上一篇文章中,我們學(xué)習(xí)了 枚舉 、 位段 和 聯(lián)合體 的相關(guān)內(nèi)容,在文章的末尾,我們還差了關(guān)于 聯(lián)合體的存儲 問題的內(nèi)容,今天我們將學(xué)習(xí)該部分的內(nèi)容,好了,話不多說,開整?。?! 結(jié)構(gòu)體 在內(nèi)存中是如何存儲的呢,是按里面的變量內(nèi)容,在 內(nèi)存中的連續(xù)地址中存

    2024年02月12日
    瀏覽(17)
  • 【C語言】一篇文章深入解析聯(lián)合體和枚舉且和結(jié)構(gòu)體的區(qū)別

    【C語言】一篇文章深入解析聯(lián)合體和枚舉且和結(jié)構(gòu)體的區(qū)別

    聯(lián)合體( union )是允許一個變量通過不同的接口訪問內(nèi)存的一種數(shù)據(jù)類型,表示一個變量可以存儲不同類型的值,而枚舉是使用 enum 定義一組相關(guān)且互斥的整形常量集合。本章阿森將和你學(xué)習(xí)聯(lián)合體類型的聲明,特點,有關(guān)大小的計算,還有枚舉類型的聲明,優(yōu)點和使

    2024年02月03日
    瀏覽(23)
  • 一篇博客學(xué)會系列(2)—— C語言中的自定義類型 :結(jié)構(gòu)體、位段、枚舉、聯(lián)合體

    一篇博客學(xué)會系列(2)—— C語言中的自定義類型 :結(jié)構(gòu)體、位段、枚舉、聯(lián)合體

    目錄 ?前言 1、結(jié)構(gòu)體 1.1、結(jié)構(gòu)體類型的聲明 1.2、特殊的結(jié)構(gòu)體類型聲明 1.3、結(jié)構(gòu)體的自引用 1.4、結(jié)構(gòu)體的定義和初始化 1.5、結(jié)構(gòu)體成員變量的調(diào)用 1.6、結(jié)構(gòu)體內(nèi)存對齊? 1.6.1、offsetof 1.6.2、結(jié)構(gòu)體大小的計算 1.6.3、為什么存在內(nèi)存對齊?? 1.7、?修改默認(rèn)對齊數(shù) 1.8、結(jié)構(gòu)

    2024年02月08日
    瀏覽(29)
  • 聯(lián)合體(C語言)

    聯(lián)合體(C語言)

    小伙伴們又來學(xué)習(xí)知識啦~,今天我要給大家介紹一下聯(lián)合體的使用,話不多說,我們開始今天的正題吧! 聯(lián)合體的介紹 C語言的聯(lián)合體(union)是一種特殊的數(shù)據(jù)類型,它可以在同一內(nèi)存空間中存儲不同的數(shù)據(jù)類型。與結(jié)構(gòu)體類似,聯(lián)合體也可以定義多個成員,但是這些成員

    2024年02月04日
    瀏覽(42)
  • 自定義類型:結(jié)構(gòu)體、枚舉、聯(lián)合體

    自定義類型:結(jié)構(gòu)體、枚舉、聯(lián)合體

    結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它由多個不同類型的成員變量組成,結(jié)構(gòu)體可以將多個相關(guān)的數(shù)據(jù)打包在一起,方便進(jìn)行管理和處理。 定義形式: struct 結(jié)構(gòu)體名{ 類型 成員名1; 類型 成員名2; //更多的成員變量 }; 如描述一個學(xué)生: struct Stu這樣就和int類型一樣,都是數(shù)

    2024年02月16日
    瀏覽(29)
  • 【C語言】聯(lián)合體和枚舉

    【C語言】聯(lián)合體和枚舉

    前言 這篇博客就把剩下的兩個自定義類型聯(lián)合體和枚舉好好總結(jié)一下,讓我們好好看看聯(lián)合體和枚舉到底是什么 個人主頁:小張同學(xué)zkf 若有問題 評論區(qū)見 感興趣就關(guān)注一下吧 目錄 ?1. 聯(lián)合體 1.1 聯(lián)合體類型的聲明 ?1.2 聯(lián)合體的特點 ?1.3 相同成員的結(jié)構(gòu)體和聯(lián)合體對比 ?

    2024年04月14日
    瀏覽(28)
  • c語言-聯(lián)合體和枚舉

    c語言-聯(lián)合體和枚舉

    (1) 像結(jié)構(gòu)體?樣,聯(lián)合體也是由一個或者多個成員構(gòu)成,這些成員可以不同的類型。 (2)但是編譯器只為最大的成員分配足夠的內(nèi)存空間。聯(lián)合體的特點是所有成員共用同一塊內(nèi)存空間。所以聯(lián)合體也叫:共用體。 (3) 給聯(lián)合體其中?個成員賦值,其他成員的值也跟著

    2024年02月04日
    瀏覽(19)
  • c語言-枚舉和聯(lián)合體

    c語言-枚舉和聯(lián)合體

    本篇文章介紹c語言中的枚舉類型和聯(lián)合體類型 枚舉類型和結(jié)構(gòu)體類型相似,都是一種自定義類型。 定義枚舉類型的: enum 枚舉類型的定義格式 例如,定義一個星期作為枚舉類型 枚舉類型的第一個成員的取值默認(rèn)為0,依次往后遞增1, 輸出枚舉WEEK每個成員的值 修改枚

    2024年01月21日
    瀏覽(24)
  • C語言枚舉與聯(lián)合體詳解

    C語言枚舉與聯(lián)合體詳解

    ? ? 本篇文章帶來 枚舉與聯(lián)合體 相關(guān)知識詳細(xì)講解! 如果您覺得文章不錯,期待你的一鍵三連哦,你的鼓勵是我創(chuàng)作的動力之源,讓我們一起加油,一起奔跑,讓我們頂峰相見?。。?目錄 一.枚舉 1.什么是枚舉? 2.枚舉類型的定義 3.枚舉的優(yōu)點 4.枚舉的使用 二.聯(lián)合體(共

    2024年02月15日
    瀏覽(21)
  • 【C語言】自定義類型——枚舉、聯(lián)合體

    【C語言】自定義類型——枚舉、聯(lián)合體

    對枚舉、聯(lián)合體進(jìn)行介紹,包括枚舉的聲明、枚舉的優(yōu)點,聯(lián)合體的聲明、聯(lián)合體的大小。 ? ? ? ? ? ? ? ? ??? 豬巴戒 :個人主頁? ??????????????? 所屬專欄 :《C語言進(jìn)階》 ? ? ? ? ?? 跟著豬巴戒 ,一起學(xué)習(xí)C語言?? 目錄 引言 枚舉 枚舉的優(yōu)點 聯(lián)合(共用體

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包