is this drawing correct? if it's not right, can you correct me?
char a[] = "halli";
const char *s = "hallo";
char *t = NULL;
CodePudding user response:
There is no "null" that t would be "pointing" to.
CodePudding user response:
a
and s
are correct (as drawings go).
t
doesn’t "point to" NULL
, t
is NULL
(stores a null pointer value).
The memory map would look something like this (addresses are for illustration only, assumes big-endian representation):
Address Item 00 01 02 03
––––––– –––– —– –– –– ––
0x1000 a 'h' 'a' 'l' 'l'
0x1004 'i' 00 ?? ??
0x1008 s 00 00 80 00
0x100c t 00 00 00 00
...
0x8000 'h' 'a' 'l' 'l'
0x8001 'o' 00 ?? ??
a
is an array of char
and stores the contents of the string "halli"
starting at address 0x1000
. s
is a pointer to char
and stores the address of the first character of the string literal "hallo"
, which starts at 0x8000
. t
is a pointer to char
and stores a null pointer value, which I’ve represented as 0x0000
.
While the null pointer constant (NULL
or the constant expression 0
in a pointer context) is always zero-valued, the null pointer value used by the execution environment doesn’t have to be - it only has to compare unequal to any pointer to an object or function.