真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

第十章-創(chuàng)新互聯(lián)

一、結(jié)構(gòu)體類型的定義及初始化

將不同類型變量封裝在一起。(本質(zhì)是一種數(shù)據(jù)類型)

創(chuàng)新互聯(lián)公司自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設計、網(wǎng)站制作、成都做網(wǎng)站、電子商務、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務。公司擁有豐富的網(wǎng)站建設和互聯(lián)網(wǎng)應用系統(tǒng)開發(fā)管理經(jīng)驗、成熟的應用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團隊及專業(yè)的網(wǎng)站設計師團隊。

方法一:

先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量

struct Student(結(jié)構(gòu)體類型名)??//定義結(jié)構(gòu)體類型

{

int num;

int name[20];

//成員列表

};

Student lucy={20,"lucy"};??//定義結(jié)構(gòu)體類型的變量? +初始化

lucy.name="bob";//錯誤,name是字符數(shù)組變量名,不帶這樣賦值的

改為:strcpy(lucy.name,"bob");

方法二:

定義類型的同時定義結(jié)構(gòu)體變量

#include?//memset的頭文件

struct Student(結(jié)構(gòu)體類型名)

{

int num;

int name[20];

//成員列表

}lucy;

Student bob;

memset(&bob,0,sizeof(bob));??//初始化為零,清空結(jié)構(gòu)體?

補充:void *memset(void *dst,void *val,void *size) :

將地址從dst開始,長度為size的所有字節(jié)賦值為 val

方法三:

定義一次性結(jié)構(gòu)體類型

struct? ? ? ? ? ? ??//無結(jié)構(gòu)體類型名,無法在外定義結(jié)構(gòu)體類型變量

{

int num;

int name[20];

//成員列表

}lucy;

*注意:

  • 定義結(jié)構(gòu)體類型時,系統(tǒng)不會為結(jié)構(gòu)體類型開辟空間,當定義結(jié)構(gòu)體類型的變量時才開辟空間。結(jié)構(gòu)體中的成員具有獨立的空間
  • 不要給成員初始化值
二、相同類型的結(jié)構(gòu)體變量之間的賦值方法

Student lucy={100,"lucy"};

Student bob;

方法一:逐個成員賦值

bob.num=lucy.num;

strcpy(lucy.name,bob.name);

方法二:直接賦值(推薦)

bob=lucy;

方法三:內(nèi)存拷貝

memcpy(&bob,&lucy,sizeof(Student));

三、結(jié)構(gòu)體嵌套結(jié)構(gòu)體?

struct Ob

{

int year;

int month;

int day;

};

struct Student

{

int num;

int name[20];

int Ob;

}lucy;

cout<

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

本質(zhì)是數(shù)組 ,存的是結(jié)構(gòu)體變量

Student arr[2]={{100,"lucy"},{20,"bob"}};

cout< 五、結(jié)構(gòu)體指針變量

本質(zhì)是變量,存的是結(jié)構(gòu)體變量的地址

Student lucy={100,"lucy"};

Student *p=&lucy;

cout<< p->num<

cout<< (&lucy)->num<

結(jié)構(gòu)體用 . 訪問成員,地址可以用->訪問成員

六、結(jié)構(gòu)體數(shù)組元素的指針變量

本質(zhì)是指針變量,保存結(jié)構(gòu)體數(shù)組元素的地址

Student arr[2];

cout

cout<<(arr+1)->num;

七、結(jié)構(gòu)體指針成員 1.結(jié)構(gòu)體變量在堆區(qū),結(jié)構(gòu)體指針成員指向文字常量區(qū)?

struct Stu

{
int num;

char *name;

}

Stu jack={20,"hello"};? //jack.name只保存了“hello”的首地址,指向文字常量區(qū),"hello"存在文字常量區(qū)內(nèi)

若要jack.name指向堆區(qū)

#include

jack.name=new char[20];

strcpy(jack.name,"hello");

delete [] lucy.name;

2.結(jié)構(gòu)體變量在堆區(qū),結(jié)構(gòu)體的指針成員也指向堆區(qū)

struct Stu

{
int num;

char *name;

}

Stu *p=new Stu;

p->name=new char[20];

p->num=100;

strcpy(p->name,"hello");

delete [] p->name;? ?//先釋放成員指向

delete p;? ? ? ? ? ? ? ? ? //再釋放結(jié)構(gòu)體變量

八、結(jié)構(gòu)體拷貝?? 1、結(jié)構(gòu)體淺拷貝

將結(jié)構(gòu)體變量空間內(nèi)容? 復制一份到? 另一個相同類型的結(jié)構(gòu)體變量空間中

*注意:如果結(jié)構(gòu)體中有指針成員,則會帶來多次釋放堆區(qū)空間的問題

lucy.name 和 bob.name都指向同一堆區(qū)空間,釋放 lucy.name 后又釋放 bob.name 就會造成堆區(qū)空間重復釋放。

Student lucy={100,"lucy"};

Student bob;

bob=lucy;

2、結(jié)構(gòu)體深拷貝?

給結(jié)構(gòu)體指針成員單獨開辟空間?

n) Student lucy={100,"lucy"};

Student bob;

bob.num=lucy.num;

bob.name=new char[20];

strcpy(bob.name,lucy.name);

九、結(jié)構(gòu)體對其規(guī)則??

以空間換時間

1.確定分配單位 (一行分配多少個字節(jié))

結(jié)構(gòu)體中大的基本類型長度決定

如果用#pragma pack(n)強制對齊,則分配單位為 min(大的基本類型長度,n)

2.確定成員偏移量

成員偏移量=成員自身類型的整數(shù)倍

3.收尾工作

結(jié)構(gòu)體的總大小=分配單位的整數(shù)倍

十、結(jié)構(gòu)體的位域

以 位 為單位的成員,叫位段/位域?

用于節(jié)約空間、位操作、嵌入式等

struct packed_data

{

unsigned int a:2;

unsigned int b:6;

}data;

  • a的類型是?unsigned int ,占 兩位 二進制位
  • 沒有非位域隔開的位域,叫相鄰位域;相同類型的相鄰位域可以壓縮,但壓縮位數(shù)不能超過自身類型大小

(本身a、b、c各占一個字節(jié),共3字節(jié),但相鄰位域可壓縮,合在一起共8位剛好1字節(jié))

  • 不要對位域取地址

  • 對位域賦值,不要超過位域本身位的寬度

  • 另起一個存儲單元

  • 無意義位段(重要)

(定義了兩個沒有賦予意義的位段,并不是不合法)?

案例:

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站名稱:第十章-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/djidoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部