將不同類型變量封裝在一起。(本質(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;
*注意:
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)體?四、結(jié)構(gòu)體數(shù)組struct Ob
{
int year;
int month;
int day;
};
struct Student
{
int num;
int name[20];
int Ob;
}lucy;
cout<
本質(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)體用 . 訪問成員,地址可以用->訪問成員 本質(zhì)是指針變量,保存結(jié)構(gòu)體數(shù)組元素的地址 Student arr[2]; cout cout<<(arr+1)->num; struct Stu { 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; struct Stu { 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)體變量空間內(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; 給結(jié)構(gòu)體指針成員單獨開辟空間? n) Student lucy={100,"lucy"}; Student bob; bob.num=lucy.num; bob.name=new char[20]; strcpy(bob.name,lucy.name); 以空間換時間 1.確定分配單位 (一行分配多少個字節(jié)) 結(jié)構(gòu)體中大的基本類型長度決定 如果用#pragma pack(n)強制對齊,則分配單位為 min(大的基本類型長度,n) 2.確定成員偏移量 成員偏移量=成員自身類型的整數(shù)倍 3.收尾工作 結(jié)構(gòu)體的總大小=分配單位的整數(shù)倍 以 位 為單位的成員,叫位段/位域? 用于節(jié)約空間、位操作、嵌入式等 struct packed_data { unsigned int a:2; unsigned int b:6; }data; (本身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)查看詳情吧
2.結(jié)構(gòu)體變量在堆區(qū),結(jié)構(gòu)體的指針成員也指向堆區(qū)
int num;
八、結(jié)構(gòu)體拷貝??
1、結(jié)構(gòu)體淺拷貝
int num;
2、結(jié)構(gòu)體深拷貝?
九、結(jié)構(gòu)體對其規(guī)則??
網(wǎng)站名稱:第十章-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/djidoj.html