Вывод адреса указателя

Рейтинг: -1Ответов: 1Опубликовано: 25.08.2023

начал изучать C++, тема указатели.

Вывод следующий

pcName1[0] - 0x4f &pcName1[0] - 0x55d7b3e50008
pcName1[1] - 0x6e &pcName1[1] - 0x55d7b3e50009
pcName1[2] - 0x65 &pcName1[2] - 0x55d7b3e5000a
pcName1[3] - 0x2c &pcName1[3] - 0x55d7b3e5000b
pcName1[4] - 0x20 &pcName1[4] - 0x55d7b3e5000c
pcName1[5] - 0x74 &pcName1[5] - 0x55d7b3e5000d
pcName1[6] - 0x77 &pcName1[6] - 0x55d7b3e5000e
pcName1[7] - 0x6f &pcName1[7] - 0x55d7b3e5000f

&pcName1[0] - 0x55d7b3e50008 - это адрес в котором хранится первый символ
pcName1[0] - 0x4f - не могу понять что это за адрес?

char* pcName1 = "One, two";

    int i{0};
    while(pcName1[i]){
      printf("pcName1[%d] - %p ", i, pcName1[i]);
      printf("&pcName1[%d] - %p ", i, &pcName1[i]);
      printf("\n");
      i++;
    }

Ответы

▲ 1

Это вообще не адрес. Попытка передать char (т.е. pcName1[i]) в "%p" (который ожидает указатель) вызывает неопределенное поведение.

Видимо, в вашем случае ASCII-код i-ого символа напечатался как шестнадцатеричное число.

Тут должно было выскочить предупреждение, если не выскочило - компилятор плохо настроен.

char* pcName1 = "One, two"; - не должно компилироваться в C++11 и новее, нужен const слева. Если у вас компилируется, то компилятор слишком старый, и/или не настроен использовать свежую версию C++.