差異
C++とCの違いについて
違いが一番大きいのはstructで、C++のstructはclassとほとんど同じで、メンバー関数がありますが、Cのstructにはメンバー変数しか含まれません.Enum,unionは区別がありません.
structの定義
1、structの宣言と変数の定義を別々に書くことを提案します.
2、structには任意のタイプの変数宣言を入れることができます.
整列の原則
1、データメンバーの配置規則.各データ・メンバーの格納の開始位置は、メンバー・サイズの整数倍から開始します.
2、データメンバーは構造体を含む:構造体メンバーは内部の最大要素サイズの整数倍アドレスから格納する.
3、構造体の総サイズ:その内部の最大基本メンバーの整数倍で、不足しているのは補充しなければならない.
unionの定義
連合体と構造体の違い
1.構造体には、各変数が順次格納される.2.連合体では、各変数はオフセットアドレスゼロから格納され、そのアドレスには毎回1人のメンバーしか格納されない.
Enumの定義
1、列挙は簡単な操作で一連の名前と一連の整数値を結びつける.
2、デフォルトでは、列挙はゼロから始まり、リストの識別子に値を割り当てると、次の識別子の値は前の値より1大きくなる.
3、#define定義の値はコンパイル時に消えますが、列挙定義の場合、デバッグのプロセスは任意に表示され、コードデバッグで使用できます.
実はenumはdefineに対応して使用することができます.
例を挙げます.
//または定義時に直接変数を定義することもできます
または、
サイズ
structの最終的なサイズは、最大のタイプの倍数とそれぞれを位置合わせすることを考慮します.
Enumの大きさを考えると一番大きいです.Enumは列挙であり、ある変数の値が列挙できる.例えば、週に1~7、月に1~12である.
structでは、ある変数に対して多くのデータ型が全体を構成しています.例えば、学生という変数、彼は学号、名前、年齢、性別などが必要です.このとき、構造体を定義する必要があります.
uninonの場合、定義された変数はすべて一緒のブロックメモリしか占めていません.連合体については、中のすべてのタイプのデータが空間の倍数を占有すると同時に最大のものよりも大きい最小数を考慮して、連合体が占有する空間です.配列タイプの処理に注意してください.
sizeof(ANDataType) = 4
sizeof(AAA)=16結果=構造の中で最大長の変数の倍数(メモリアラインメントの原則に従う)は、上記のようにdoubleの長さが8の場合、全体は8*2=16であり、charの長さが1であり、2つのcharが2であり、依然として8未満であるため、8で計算すると、9つのchar変数があれば、その中の8つのcharは合計8であり、残りの1つは8バイト未満で計算される.例:
構造体における変数の長さによって重ねると、大きさは8+(1+1+1+1+1+1)+1=17、16<17<24、構造体の大きさは24、例えば、
構造体の変数の長さで重ねると、大きさは8+1+4=13、8<13<16、構造体の大きさは16
コンビネーションは、定義された最大のデータ型の長さに準じ、このコンビネーションのsizeは8です.
コメント
unionはstructのサイズとその内部定義の関数には関係ありません!
違いが一番大きいのはstructで、C++のstructはclassとほとんど同じで、メンバー関数がありますが、Cのstructにはメンバー変数しか含まれません.Enum,unionは区別がありません.
structの定義
struct
{
1 1;
2 2;
3 3;
4 4;
5 5;
};
1、structの宣言と変数の定義を別々に書くことを提案します.
2、structには任意のタイプの変数宣言を入れることができます.
整列の原則
1、データメンバーの配置規則.各データ・メンバーの格納の開始位置は、メンバー・サイズの整数倍から開始します.
2、データメンバーは構造体を含む:構造体メンバーは内部の最大要素サイズの整数倍アドレスから格納する.
3、構造体の総サイズ:その内部の最大基本メンバーの整数倍で、不足しているのは補充しなければならない.
unionの定義
union
{ 1 1; 2 2; 3 3; 4 4; 5 5; };
連合体と構造体の違い
1.構造体には、各変数が順次格納される.2.連合体では、各変数はオフセットアドレスゼロから格納され、そのアドレスには毎回1人のメンバーしか格納されない.
Enumの定義
enum { small, media =7, large =10, humungous };
1、列挙は簡単な操作で一連の名前と一連の整数値を結びつける.
2、デフォルトでは、列挙はゼロから始まり、リストの識別子に値を割り当てると、次の識別子の値は前の値より1大きくなる.
3、#define定義の値はコンパイル時に消えますが、列挙定義の場合、デバッグのプロセスは任意に表示され、コードデバッグで使用できます.
実はenumはdefineに対応して使用することができます.
例を挙げます.
union a
{
int b;
char c;
};
a abc;
abc.b=4;
abc.c=5;
//または定義時に直接変数を定義することもできます
union a
{
int b;
char c;
}abc;
abc.b=4;
abc.c=5;
または、
typedef union
{
int b;
char c;
}a;
a abc;
abc.b=4;
abc.c=5;
サイズ
structの最終的なサイズは、最大のタイプの倍数とそれぞれを位置合わせすることを考慮します.
Enumの大きさを考えると一番大きいです.Enumは列挙であり、ある変数の値が列挙できる.例えば、週に1~7、月に1~12である.
structでは、ある変数に対して多くのデータ型が全体を構成しています.例えば、学生という変数、彼は学号、名前、年齢、性別などが必要です.このとき、構造体を定義する必要があります.
uninonの場合、定義された変数はすべて一緒のブロックメモリしか占めていません.連合体については、中のすべてのタイプのデータが空間の倍数を占有すると同時に最大のものよりも大きい最小数を考慮して、連合体が占有する空間です.配列タイプの処理に注意してください.
typedef enum
{
ANUnknown = 0,
ANShapeFile = 1,
ANSDEDatabase = 2,
ANFileDatabase = 3,
ANRasterFile = 4
}ANDataType;
sizeof(ANDataType) = 4
struct AAA { double d; char ss; char s; };
sizeof(AAA)=16結果=構造の中で最大長の変数の倍数(メモリアラインメントの原則に従う)は、上記のようにdoubleの長さが8の場合、全体は8*2=16であり、charの長さが1であり、2つのcharが2であり、依然として8未満であるため、8で計算すると、9つのchar変数があれば、その中の8つのcharは合計8であり、残りの1つは8バイト未満で計算される.例:
struct AAA
{
double d;
char s1;
char s2;
char s3;
char s4;
char s5;
char s6;
char s7;
char s8;
char s9;
};
構造体における変数の長さによって重ねると、大きさは8+(1+1+1+1+1+1)+1=17、16<17<24、構造体の大きさは24、例えば、
struct AAA
{
double d;
char s1;
int i;
};
構造体の変数の長さで重ねると、大きさは8+1+4=13、8<13<16、構造体の大きさは16
union AAA
{
double d;
int i;
};
コンビネーションは、定義された最大のデータ型の長さに準じ、このコンビネーションのsizeは8です.
コメント
unionはstructのサイズとその内部定義の関数には関係ありません!