If we use [0x9999] to mark the memory address, * [0x9999] indicates the value stored in the address memory.
Variable
Int;
A * [0x9999] 1
& A [0x9999]
Pointer
Int *;
A * [0x8888] [0x9999]
* A * (* [0x8888]) * [0x9999] 1
& A [0x8888]
Struct variable
Struct mystruct
{
Int A; [0x9991]
Int B; [0x9992]
Int C; [0x9993]
} S;
S * [0x9991] 1
& S [0x9991]
S. A * [0x9991] 1
& S. A [0x9991]
Struct pointer variable
Struct mystruct
{
Int A; [0x9999]
Int B; [0x999a]
Int C; [0x999b]
};
Struct mystruct * s;
S * [0x8888] [0x9999]
* S * (* [0x8888]) * [0x9999] 1
& S [0x8888]
S-> A * (* [0x8888]) * [0x9999] 1
& S-> A [0x9999]
* S-> anone
Array (strange)
Int A [];
& A [0x9999]
A [0x9999]
* A * [0x9999] 1
A [0] * [0x9999] 1
& A [0] [0x9999]
Struct array (strange)
Struct mystruct
{
Int A; [0x9999]
Int B; [0x999a]
Int C; [0x999b]
};
Struct mystruct s [];
S [0]. a x [0x9999] 1
S [0] X [0x9999] 1
& S [0] [0x9999]
S [0x9999]
* S x [0x9999] 1
& S [0x9999]