Проще говоря, он не хранится нигде в вашей программе. Только компилятор отслеживает это.
Под капотом:
s6
означает «адрес XXXXXXXX: блок из шести байтов, содержащий значения 'H', 'e', 'l', 'l', 'o', 0
»
s7
означает «адрес ГГГГГГГ: блок из четырех байтов, содержащий значения ZZ, ZZ, ZZ, ZZ
»
*s7
означает «адрес ZZZZZZZZ: блок из одного байта, содержащий значение 'H'
»
Программа фактически не должна хранить значение XXXXXXXX где-либо; компилятор просто вставляет значение XXXXXXXX в любое место, где вы используете s6
.
Аналогично, программе не нужно нигде хранить YYYYYYYY, но она хранит для сохранения ZZZZZZZZ, потому что вы специально это сказали (вы сказали присвоить значение ZZZZZZZZ переменной s7
).
Если вы хотите где-то хранить XXXXXXXX, вы можете легко сделать это:
char my_pointer* = &s6;
Теперь my_pointer
означает «адрес WWWWWWWW: блок из четырех байтов, содержащий значения XX, XX, XX, XX
».
P.S. Это предполагает, что вы находитесь в системе с четырехбайтовыми указателями; в настоящее время более вероятно, что указатель составляет восемь байтов или 64 бита.