Получение адреса указателя
Приношу свои извинения, я знаю, что есть миллион вопросов по указателям, массивам и т. Д., Хотя я и не могу найти ничего, что указывало бы (ха-ха!) На ответ.
У меня есть указатель, который инициализирован, чтобы указать на кусок памяти, я понимаю, что я могу получить доступ к этой памяти подобно тому, как я бы массив:
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];
и вы должны получить адрес напечатан.