好好學(xué)習(xí)了一下復(fù)合數(shù)據(jù)類型,結(jié)構(gòu)體,聯(lián)合,枚舉。
結(jié)構(gòu)體的定義:
struct name
{
int a;
int b;
}change;
name是數(shù)據(jù)類型,即該結(jié)構(gòu)體的數(shù)據(jù)類型。以后就可以直接用name來定義該數(shù)據(jù)類型的變量。change是該結(jié)構(gòu)體類型的變量。
結(jié)構(gòu)體有幾個(gè)特點(diǎn):
1 結(jié)構(gòu)體是一種數(shù)據(jù)類型,并不占有內(nèi)存。因此如果有如下定義:
struct name{
char a[10]=" abcd";
int b;
}change;
這種寫法是錯(cuò)誤的,因?yàn)椴荒苤苯釉诮Y(jié)構(gòu)體內(nèi)對(duì)成員賦值。并沒有內(nèi)存。
2 結(jié)構(gòu)體所占內(nèi)存的計(jì)算
一般是各個(gè)成員類型的內(nèi)存之和,但是還要注意與運(yùn)行環(huán)境有關(guān),像32位機(jī),每次處理數(shù)據(jù)是四個(gè)字節(jié)四個(gè)字節(jié)的處理,因此對(duì)于結(jié)構(gòu)體中成員類型內(nèi)存應(yīng)該是四的倍數(shù),例如:
struct name
{
int a;
char b;
char c;
}change ;
此時(shí)結(jié)構(gòu)體的內(nèi)存總和是4+4,8個(gè)字節(jié)。
當(dāng)交換三個(gè)變量的定義順序,b a c順序,此時(shí)的內(nèi)存是4+4+4 =12個(gè)字節(jié)。
但是 當(dāng)成員中有一個(gè)short int 類型,此時(shí)就應(yīng)該是2的倍數(shù),因?yàn)閟hort int 是兩個(gè)字節(jié),需要統(tǒng)一。
3 變化結(jié)構(gòu)體定義的形式 如:
(1 ) struct neme
{
int a;
int b;
}c;
(2) struct
{
int a;
}c;
(3)typedef struct name
{int a;
int b;
}c;
上述三個(gè)例子中c 分別是 結(jié)構(gòu)體變量,結(jié)構(gòu)體變量,結(jié)構(gòu)體類型名。一和二的不同是 第二種c是無名的變量。因此是獨(dú)一無二的一個(gè)該類型。要想定義一個(gè)指針??梢栽诙x結(jié)構(gòu)體的時(shí)候同時(shí)定義兩個(gè)變量,一個(gè) c *p; p=&c;此時(shí)便指向了c變量。這個(gè)時(shí)候用強(qiáng)制類型是不行的。
此外還要注意對(duì)結(jié)構(gòu)體成員的訪問,(*p).a;或者p->a;
聯(lián)合
union name
{
int a;
char b;
}change;
共用體的結(jié)構(gòu)定義和結(jié)構(gòu)體的定義是一樣的,只是內(nèi)存分配的形式不一樣,共用體是占用數(shù)據(jù)類型的類型的內(nèi)存,
如上面的例子,可知該共用體的內(nèi)存是4個(gè)字節(jié)。
因此對(duì)共用體賦值的時(shí)候會(huì)出現(xiàn)麻煩。例如:
change.a=0;
change.b=-7;
cout< 此時(shí)的結(jié)果不是-7;共用體的系統(tǒng)內(nèi)存非配是底地址靠齊,因此-7是占一個(gè)字節(jié),位是符號(hào)位,但是對(duì)于整形的數(shù)來說并不是符號(hào)位,所以高位都是0,結(jié)果是256-7=249;所以對(duì)共用體的賦值一定要注意。
枚舉
enum day{mon,tue,wed,thr};
枚舉類型,day是類型,mon 等是枚舉值,系統(tǒng)默認(rèn)從0開始賦值,后一個(gè)事前一個(gè)加一??荚嚧筇崾久杜e值還可以自己來對(duì)其賦值。
如:mon=4,tue,wed=7,thr
此時(shí)枚舉值是4 5 7 8
可以定義枚舉變量 day a;
a=0;這樣賦值是不對(duì)的,因?yàn)槊杜e類型的變量賦值只能是枚舉值的值,因此a=mon,這個(gè)時(shí)候就是正確的。
還有,枚舉類型的內(nèi)存, 都是4個(gè)字節(jié)。
結(jié)構(gòu)體的定義:
struct name
{
int a;
int b;
}change;
name是數(shù)據(jù)類型,即該結(jié)構(gòu)體的數(shù)據(jù)類型。以后就可以直接用name來定義該數(shù)據(jù)類型的變量。change是該結(jié)構(gòu)體類型的變量。
結(jié)構(gòu)體有幾個(gè)特點(diǎn):
1 結(jié)構(gòu)體是一種數(shù)據(jù)類型,并不占有內(nèi)存。因此如果有如下定義:
struct name{
char a[10]=" abcd";
int b;
}change;
這種寫法是錯(cuò)誤的,因?yàn)椴荒苤苯釉诮Y(jié)構(gòu)體內(nèi)對(duì)成員賦值。并沒有內(nèi)存。
2 結(jié)構(gòu)體所占內(nèi)存的計(jì)算
一般是各個(gè)成員類型的內(nèi)存之和,但是還要注意與運(yùn)行環(huán)境有關(guān),像32位機(jī),每次處理數(shù)據(jù)是四個(gè)字節(jié)四個(gè)字節(jié)的處理,因此對(duì)于結(jié)構(gòu)體中成員類型內(nèi)存應(yīng)該是四的倍數(shù),例如:
struct name
{
int a;
char b;
char c;
}change ;
此時(shí)結(jié)構(gòu)體的內(nèi)存總和是4+4,8個(gè)字節(jié)。
當(dāng)交換三個(gè)變量的定義順序,b a c順序,此時(shí)的內(nèi)存是4+4+4 =12個(gè)字節(jié)。
但是 當(dāng)成員中有一個(gè)short int 類型,此時(shí)就應(yīng)該是2的倍數(shù),因?yàn)閟hort int 是兩個(gè)字節(jié),需要統(tǒng)一。
3 變化結(jié)構(gòu)體定義的形式 如:
(1 ) struct neme
{
int a;
int b;
}c;
(2) struct
{
int a;
}c;
(3)typedef struct name
{int a;
int b;
}c;
上述三個(gè)例子中c 分別是 結(jié)構(gòu)體變量,結(jié)構(gòu)體變量,結(jié)構(gòu)體類型名。一和二的不同是 第二種c是無名的變量。因此是獨(dú)一無二的一個(gè)該類型。要想定義一個(gè)指針??梢栽诙x結(jié)構(gòu)體的時(shí)候同時(shí)定義兩個(gè)變量,一個(gè) c *p; p=&c;此時(shí)便指向了c變量。這個(gè)時(shí)候用強(qiáng)制類型是不行的。
此外還要注意對(duì)結(jié)構(gòu)體成員的訪問,(*p).a;或者p->a;
聯(lián)合
union name
{
int a;
char b;
}change;
共用體的結(jié)構(gòu)定義和結(jié)構(gòu)體的定義是一樣的,只是內(nèi)存分配的形式不一樣,共用體是占用數(shù)據(jù)類型的類型的內(nèi)存,
如上面的例子,可知該共用體的內(nèi)存是4個(gè)字節(jié)。
因此對(duì)共用體賦值的時(shí)候會(huì)出現(xiàn)麻煩。例如:
change.a=0;
change.b=-7;
cout<
枚舉
enum day{mon,tue,wed,thr};
枚舉類型,day是類型,mon 等是枚舉值,系統(tǒng)默認(rèn)從0開始賦值,后一個(gè)事前一個(gè)加一??荚嚧筇崾久杜e值還可以自己來對(duì)其賦值。
如:mon=4,tue,wed=7,thr
此時(shí)枚舉值是4 5 7 8
可以定義枚舉變量 day a;
a=0;這樣賦值是不對(duì)的,因?yàn)槊杜e類型的變量賦值只能是枚舉值的值,因此a=mon,這個(gè)時(shí)候就是正確的。
還有,枚舉類型的內(nèi)存, 都是4個(gè)字節(jié)。