実際には構造体で
struct student
{
int roll_no;
char* name;
int* pointer;
}
Cはあなたが望むことを正確に行います(「構造パディング」以外に、これは別の話です)。Intel プロセッサを想定するとgcc
、構造体は
- の 4 バイト
int
、その後に続く
- nameへの 4 バイトの
char *
ポインターと、それに続く
int *
ポインターへのポインターの 4 バイト
nameメンバは char(s) へのポインタであり、通常はメモリ内のどこかにある文字列へのポインタです。例えば
char *string = "John Doe";
int value = 255;
struct student me;
me.roll_no = 15;
me.name = string;
me.pointer = &value;
ここで文字列はメモリのどこかにあります - お気づきのように、構造体よりもずっと前に宣言されています。そのメモリ位置が0x12345678
で、値が で0x20000000
、構造が 0x22222222 であるとします。
0x12345678 : John Doe\0
...
0x20000000 : FF000000 // 255
...
0x22222222 : 0F0000001234567820000000
、文字列アドレス、および値アドレスの構造が表示0F000000
されます。15
12345678
20000000