В этом примере У меня есть массив из четырех элементов. Я объявил указатель на целое число, которое содержит адрес массива. Затем я показал адрес 0-го индекса тремя разными способами. Аналогично, адрес 1-го индекса отображается тремя различными способами. Когда я выдаю это (pNumbers) +0, его можно понять, что будет отображаться уникальный и другой адрес. В следующей строке * (& pNumbers + 0) отображает 0-й индексный адрес (так как он содержит указатель). Теперь возникает проблема. При выводе этой строки (pNumbers) +1 линия снова отображает массив 0-го индекса. Зачем ?Когда я добавляю свой адрес указателя, он указывает на мой массив? Зачем? Справочная и разуменная путаница C++
первый вопрос: Когда я получаю адрес указателя (& pNumbers), он отображает новый и уникальный адрес. Но когда я добавляю в этот адрес. Как он обращается к адресам элементов массива?
напримерenter code here
cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl // new address + 1 but showing address of 0 element.
cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl // showing address of of 1st index
второй вопрос: Если сказать, что это делает как-то указывает на соответствующие элементы массива. По моему разыменованию, почему он не отображает правильное значение данных, соответствующее элементам массива.
напримерenter code here
cout<<" *(&pNumbers+1) "<< *(&pNumbers+1) // assumption was 31 (but displaying some 0x1f)
cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl // assumption was 28 (but displpaying 0x1c)
Ниже приведен исходный код:
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{int number[] = { 31, 28, 31, 30};
int *pNumbers = number;
cout<<" Address of number[0] "<<number<<endl;
cout<<" Address of number[1] "<<number+1<<endl;
cout<<" Address of number[2] "<<number+2<<endl;
cout<<" Address of number[3] "<<number+3<<endl<<endl;
cout<<" Address of &pNumbers "<< &pNumbers<<endl<<endl; // address of pNumbers
cout<<" Address of number "<< number<<endl; // address of array's first element
cout<<" pNumber Address "<< pNumbers<<endl;
cout<<" &(pNumbers[0]) "<< &(pNumbers[0])<<endl<<endl;
cout << " pNumbers+1: " << pNumbers+1<<endl; //address of array's second element
cout<<" (&pNumbers[1]) "<<(&pNumbers[1])<<endl; //
cout<<" (pNumbers+1) "<< (pNumbers+1) <<endl<<endl;
cout<<" (&pNumbers)+0 "<< (&pNumbers)+0<<endl;
cout<<" *(&pNumbers+0) "<< *(&pNumbers+0)<<endl<<endl;
cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl<<endl; // new address + 1 expected but displaying array's 0th index address why ?
cout<<" *(&pNumbers+1) "<<*(&pNumbers+1)<<endl<<endl;
cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl<<endl;
cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl<<endl;
cout<<" (&pNumbers + 3) "<<(&pNumbers+3)<<endl<<endl;
cout<<" *(&pNumbers + 3) "<<*(&pNumbers+3)<<endl<<endl;
cout<<" (&pNumbers + 4) "<<(&pNumbers+4)<<endl<<endl;
cout<<" *(&pNumbers + 4) "<<*(&pNumbers+4)<<endl<<endl;
return 0;
}
'предположение было равно 31 (но отображение некоторого 0x1f)' 0x1f в hexdecimal ** равно ** 31 в десятичной системе. – PaulMcKenzie
Я бы предположил, что это потому, что pNumbers находится в стеке прямо перед номерами [], это будет зависящим от компилятора, и действительно, когда я его запускаю, я вижу другой вывод. –
И для вашего второго вопроса число 28 в базе десять * * такое же число, как 0x1C в шестнадцатеричном формате. Они равны. –