最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

結(jié)構(gòu)體、共同體和枚舉

2023-07-11 07:12 作者:清光照歸途  | 我要投稿

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

是用戶自定義的類型,可以將多種數(shù)據(jù)的表示合并在一起描述一個(gè)完整的對(duì)象

定義結(jié)構(gòu)體

語法:


?

  • 結(jié)構(gòu)體名為標(biāo)識(shí)符

  • 結(jié)構(gòu)體成員可以是任意數(shù)據(jù)類型

  • 定義結(jié)構(gòu)體的代碼可以放在任意位置,但一般建議放在main函數(shù)上面或者頭文件中

  • 結(jié)構(gòu)體成員可以用C++的類(例如String),但不提倡

  • C++中,結(jié)構(gòu)體中可以使用函數(shù),但不提倡

  • C++中,定義結(jié)構(gòu)體時(shí)可以指定缺省值



創(chuàng)建結(jié)構(gòu)體變量

語法:


?在C++中,struct關(guān)鍵字可以不寫

?可以在定義結(jié)構(gòu)體的事后創(chuàng)建結(jié)構(gòu)體變量名和賦初值


使用結(jié)構(gòu)體

訪問結(jié)構(gòu)體


清空結(jié)構(gòu)體(只適用于C++基本數(shù)據(jù)類型)

==創(chuàng)建的結(jié)構(gòu)體變量未初始化,其值為垃圾值==


復(fù)制結(jié)構(gòu)體(只適用于C++基本數(shù)據(jù)類型)

1、memcpy(目標(biāo)結(jié)構(gòu)體地址,源結(jié)構(gòu)體地址);
2、直接用"?=?"


結(jié)構(gòu)體占用內(nèi)存大小

sizeof(結(jié)構(gòu)體名)得到整個(gè)結(jié)構(gòu)體占用內(nèi)存大小

整個(gè)結(jié)構(gòu)體占用的內(nèi)存大小不一定等于各結(jié)構(gòu)體成員占用的內(nèi)存之和

??原因:結(jié)構(gòu)體內(nèi)存對(duì)齊

結(jié)構(gòu)體指針

聲明結(jié)構(gòu)體指針

步驟??

  1. 聲明結(jié)構(gòu)體變量

  2. 聲明結(jié)構(gòu)體指針,指向結(jié)構(gòu)體變量

struct?結(jié)構(gòu)體名?*指針名?=?結(jié)構(gòu)體變量名的地址

?結(jié)構(gòu)體變量名未被解釋為地址,結(jié)構(gòu)體變量名的地址應(yīng)為&結(jié)構(gòu)體變量名

通過結(jié)構(gòu)體指針訪問結(jié)構(gòu)體成員

方法一:(*指針名).結(jié)構(gòu)體成員名 ?

?在方法一種括號(hào)不能去掉,因?yàn)?strong>' . '的優(yōu)先級(jí)高于' * '

方法二??:指針名->結(jié)構(gòu)體成員名


用途

  • 用于函數(shù)的參數(shù)



  • 用于動(dòng)態(tài)分配內(nèi)存



?結(jié)構(gòu)體指針初始化使用memset()函數(shù)時(shí)

memset(ptr,0,sizeof(ptr)) ? ? ? ??

memset(ptr,0,sizeof(stu1)) ? ??

原因: ptr為指針,sizeof(指針)任何時(shí)候都為8,而不是結(jié)構(gòu)體的內(nèi)存大小

結(jié)構(gòu)體數(shù)組

聲明結(jié)構(gòu)體數(shù)組

語法:

struct??結(jié)構(gòu)體類型????數(shù)組名[數(shù)組長(zhǎng)度]

初始化結(jié)構(gòu)體數(shù)組


訪問結(jié)構(gòu)體數(shù)組

  • 數(shù)組表示法(用的多)



  • 指針表示法(用的少)



結(jié)構(gòu)體中嵌入數(shù)組或者結(jié)構(gòu)體

結(jié)構(gòu)體中嵌入一維數(shù)組


結(jié)構(gòu)體中嵌入二維數(shù)組

把二維數(shù)組放入結(jié)構(gòu)體中作為一個(gè)成員,調(diào)用函數(shù)時(shí),把結(jié)構(gòu)體的地址傳給函數(shù),函數(shù)的形參用指針接收結(jié)構(gòu)體的地址


結(jié)構(gòu)體中嵌入其他結(jié)構(gòu)體

?結(jié)構(gòu)體中不能夠嵌套自身


結(jié)構(gòu)體中的指針

如果結(jié)構(gòu)體中的指針指向的是動(dòng)態(tài)分配的內(nèi)存地址

  • 對(duì)結(jié)構(gòu)體使用sizeof運(yùn)算符可能毫無意義


    sizeof運(yùn)算符得到的只包括了結(jié)構(gòu)體中的int型和int指針的內(nèi)存大小,而不包括指針p指向的動(dòng)態(tài)分配的內(nèi)存,這是不合理的


  • 對(duì)結(jié)構(gòu)體用memset函數(shù)可能會(huì)造成內(nèi)存泄露


    在C++中,動(dòng)態(tài)分配的內(nèi)存只能使用指針來訪問,如果使用memset(&s1,0,sizeof(st_stu))只會(huì)清空指針,這會(huì)導(dǎo)致兩個(gè)問題


  1. 指針p變?yōu)榭罩羔?,后續(xù)對(duì)指針p的操作可能會(huì)導(dǎo)致程序崩潰

  2. 指針p指向的動(dòng)態(tài)分配的內(nèi)存未被釋放,可能會(huì)導(dǎo)致內(nèi)存泄露

  • C++字符串String中有一個(gè)指向的是動(dòng)態(tài)分配的內(nèi)存地址的指針,在結(jié)構(gòu)體中使用應(yīng)注意



共同體

共同體能存儲(chǔ)不同的數(shù)據(jù)類型,但是在同一時(shí)間只能存儲(chǔ)其中的一種類型

定義語法


注意

  • 共同體占用的內(nèi)存大小為其中最大的成員占用的內(nèi)存大?。?a target="_blank" >內(nèi)存對(duì)齊)



  • 全部成員使用同一塊內(nèi)存



  • 共同體中的值為最后被賦值的那個(gè)成員的值



  • 匿名共同體沒有名字,可以在定義時(shí)創(chuàng)建共同體變量,也可以嵌入結(jié)構(gòu)體中



枚舉

枚舉是一種創(chuàng)建符號(hào)常量的方法

枚舉的語法


enum colors {red , yellow , blue}; colors成為了一種新的枚舉類型名稱,用它可以創(chuàng)建枚舉變量;red、yellow、blue作為符號(hào)常量,默認(rèn)值為0,1,2


注意事項(xiàng)

  • 用枚舉創(chuàng)建的變量取值只能在枚舉量范圍內(nèi)

  • 枚舉的作用域與枚舉變量的作用域相同

  • 可以顯式的設(shè)置枚舉量的值(必須為整數(shù))



  • 可以顯式的設(shè)置指定的某些枚舉量的值(枚舉量的值可以重復(fù))



  • 可以將整數(shù)強(qiáng)制轉(zhuǎn)化為枚舉量,語法為 枚舉類型(整數(shù))




結(jié)構(gòu)體、共同體和枚舉的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
赤峰市| 噶尔县| 漾濞| 如皋市| 永丰县| 阿拉尔市| 双辽市| 赞皇县| 桑日县| 通化县| 大连市| 海原县| 射阳县| 上饶县| 株洲市| 商南县| 台北市| 宜兰市| 深泽县| 安仁县| 新田县| 潞西市| 青海省| 鄂托克前旗| 老河口市| 玛曲县| 合江县| 聊城市| 新民市| 连南| 都匀市| 北票市| 寻甸| 德安县| 龙里县| 丹凤县| 独山县| 屯留县| 庄河市| 彭水| 梅河口市|