Получение адреса указателя

Приношу свои извинения, я знаю, что есть миллион вопросов по указателям, массивам и т. Д., Хотя я и не могу найти ничего, что указывало бы (ха-ха!) На ответ.

У меня есть указатель, который инициализирован, чтобы указать на кусок памяти, я понимаю, что я могу получить доступ к этой памяти подобно тому, как я бы массив:

char *mMem=new char[5000];
cout<<mMem[5]<<endl;

Что на самом деле:

char *mMem=new char[5000];
cout<<*(mMem+5)<<endl;

Однако я не понимаю, как получить адрес элемента - я знаю, что элемент не совсем правильное слово, учитывая, что mMem не является массивом - это если мое понимание верно, не может быть слишком конечно, потому что каждый сайт использует любые слова, которые он хочет, когда дело доходит до указателей и массивов. Итак, если у меня есть:

char *mMem=new char[5000];
cout<<mMem[5]<<endl;
    or
cout<<*(mMem+5)<<endl;

почему адрес оператора не работает правильно:

cout<<&mMem[5]<<endl;

Вместо того, чтобы получить адрес 5-го элемента, я получаю распечатку содержимого блока памяти с этого элемента и далее. Итак, почему адрес оператора не работает так, как я ожидал, и как я могу получить адрес элемента памяти?

2 ответа

Решение

&mMem[5] это адрес 5-го элемента. Причина, по которой вы получаете оттуда распечатку памяти, заключается в том, что они &mMem[5] является char*, но строки в устаревшем C также имеют char*, Итак << Оператор просто думает, что вы хотите напечатать строку оттуда. Я бы попробовал навести указатель на void* перед печатью:

cout << static_cast<void*>(&mMem[5]) << endl;

Кстати, &mMem[5] а также mMem+5 точно так же.

Вы получаете адрес элемента 5, как вы ожидаете, но cout функциональность печати для char * должен распечатать содержимое строки в этой ячейке памяти, а не значение указателя.

Приведите указатель к int: cout << (int)&mMem[5]; и вы должны получить адрес напечатан.

Другие вопросы по тегам