結構體中的成員並不一定是連續存儲地存儲在內存單元中 使用共同體可以節約存儲空間


 小結:

1、結構體成員的地址順序同結構體定義時的成員的先后順序;

 

1、 

Q

為什么不能用運算符==或!=來對結構體進行比較

A

結構體中的成員並不一定是連續存儲地存儲在內存單元中

 

2、

對結構體成員訪問

.  structure member operator 結構體成員運算符 .

-> structure pointer operator 結構體指針運算符 ->

struct card {

char *face;

char *suit;

} aCard,deck[52],*cardPtr;

aCard.suit;

cardPtr->suit;等價於(*cardPtr).suit; 優先級 .>*

 

3、

#include <stdio.h>
union number {
int x;
double y;
};
int main(void) {
union number value;
value.x = 100;
printf("%d,%f\n",value.x,value.y);
value.y = 100.0;
printf("%d,%f\n",value.x,value.y);
}

與結構體一行,共同體也是一種派生類型。

共同體的成員共享同一個存儲空間。

123,2426809083006282900000000000000000000000000000000000000000000000000.000000
0,100.000000
請按任意鍵繼續. . .

 每次只能訪問共同體的一個成員;

存儲一個共同體所用的字節總數,必須保證至少足以能夠容納其最大的成員。

 

#include <stdio.h>
union number {
int x;
double y;
};
int main(void) {
union number value;
value.x = 123;
printf("%d,%f\n",value.x,value.y);
printf("%d,%d,%d\n",&value,&(value.x),&(value.y));
value.y = 100.0;
printf("%d,%f\n",value.x,value.y);
printf("%d,%d,%d\n",&value,&(value.x),&(value.y));
}

123,-28473359069967665000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000.000000
37814048,37814048,37814048
0,100.000000
37814048,37814048,37814048
請按任意鍵繼續. . .

 

4、對比結構體成員地址

#include <stdio.h>
struct card {
char *face;
char *suit;
};
int main(void) {
struct card aCard,*cardPtr;
aCard.face="Ace";
aCard.suit="Spades";
cardPtr=&aCard;
printf("%s of %s \n%s of %s \n",aCard.face,aCard.suit,cardPtr->face,cardPtr->suit);
printf("%d,%d,%d\n%d,%d,%d",&aCard,&aCard.face,&aCard.suit,cardPtr,&cardPtr->face,&cardPtr->suit);
return 0;
}

 

Ace of Spades
Ace of Spades
37814048,37814048,37814052
37814048,37814048,37814052請按任意鍵繼續. . .

 

#include <stdio.h>
struct card {
char *suit;
char *face;
};
int main(void) {
struct card aCard,*cardPtr;
aCard.face="Ace";
aCard.suit="Spades";
cardPtr=&aCard;
printf("%s of %s \n%s of %s \n",aCard.face,aCard.suit,cardPtr->face,cardPtr->suit);
printf("%d,%d,%d\n%d,%d,%d",&aCard,&aCard.face,&aCard.suit,cardPtr,&cardPtr->face,&cardPtr->suit);
return 0;
}

 

Ace of Spades
Ace of Spades
37814048,37814052,37814048
37814048,37814052,37814048請按任意鍵繼續. . .

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM