| 1 |
#include"iostream" |
| 2 |
using namespace std; |
| 3 |
|
| 4 |
struct TestStruct |
| 5 |
{ |
| 6 |
int iNumber; |
| 7 |
char charArray[10]; |
| 8 |
char ch; |
| 9 |
double dNumber; |
| 10 |
}; |
| 11 |
//【嵌套的結構體類型成員】 |
| 12 |
struct Date |
| 13 |
{ |
| 14 |
int Day; |
| 15 |
int Month; |
| 16 |
int Year; |
| 17 |
} ; |
| 18 |
struct Person /*定義結構體*/ |
| 19 |
{ |
| 20 |
char Name[20]; |
| 21 |
int Age; |
| 22 |
struct Date Birthday; //嵌套Date結構體類型成員 |
| 23 |
} ; |
| 24 |
//【結構體中的指標成員】 |
| 25 |
struct Student{ |
| 26 |
char *name; |
| 27 |
int score; |
| 28 |
struct Student* next; |
| 29 |
}; |
| 30 |
|
| 31 |
int main(int argc, char* argv[]) |
| 32 |
{ |
| 33 |
//結構體的大小【結構體對齊】 |
| 34 |
//A: 結構體變數的首地址能夠被其最寬基本類型成員的大小所整除 |
| 35 |
//B: 結構體每個成員相對於結構體首地址的位移量都是成員自身大小的整數倍,如有需要編譯器會在成員之間加上填充位元組 |
| 36 |
//C:結構體的總大小為結構體最寬基本類型成員大小的整數倍 |
| 37 |
cout<<"Size of TestStruct "<<sizeof(TestStruct)<<endl; |
| 38 |
cout<<"Size of Date "<<sizeof(Date)<<endl; |
| 39 |
cout<<"Size of Person "<<sizeof(Person)<<endl; |
| 40 |
|
| 41 |
//【結構體變數】 |
| 42 |
TestStruct t ={5,"bcdefg",'a',1.1}; |
| 43 |
cout<<"TestStruct ch:"<<t.ch<<" charArray:"<<t.charArray<<" dNumber:"<<t.dNumber<<" iNumber:"<<t.iNumber<<endl; |
| 44 |
|
| 45 |
//【結構體數組】 |
| 46 |
TestStruct tt[3] ={{8,"bcdefg",'m',1.2},{6,"hijklm",'b',2.2},{7,"nopqrs",'c',3.3}}; |
| 47 |
for (int i=0;i<3;i++) |
| 48 |
{ |
| 49 |
cout<<"TestStruct["<<i<< "]ch:"<<tt[i].ch<<" charArray:"<<tt[i].charArray<<" dNumber:"<<tt[i].dNumber<<" iNumber:"<<tt[i].iNumber<<endl; |
| 50 |
} |
| 51 |
//【指標變數與結構體變數】 |
| 52 |
//必須要給結構體指標變數賦予一個有效結構體變數地址,才能正常操作結構體指標變數。 |
| 53 |
//TestStruct *p =&t;否則將出現不可預知的問題。(*p).ch 等價於 p->ch |
| 54 |
TestStruct *p =&t; |
| 55 |
cout<<"TestStruct p->ch:"<<p->ch<<" p->charArray:"<<p->charArray<<" p->dNumber:"<<p->dNumber<<" p->iNumber:"<<p->iNumber<<endl; |
| 56 |
//【指向結構體數組的指標】 |
| 57 |
//pp的初值為tt,即指向第一個元素,則pp加1後pp就指向下一個元素的起始地址(即tt[1]得起始地址)。 |
| 58 |
TestStruct *pp ; |
| 59 |
for(pp =tt;pp<tt+3;pp++) |
| 60 |
{ |
| 61 |
cout<<"TestStruct pp->ch:"<<pp->ch<<" pp->charArray:"<<pp->charArray<<" pp->dNumber:"<<pp->dNumber<< |