Указатели на основные типы данных - на арифметические данные и на символьные.Пример работы с указателем на данные арифметического типа int: int n = 6, *pn = &n; cout << pn<<'\t' << *pn; // будет выведено : 0x1E10FFC 6 // адрес значение Пример работы с указателем на данные символьного типа char: char c = 65, *pc= &c; cout << pc << '\t' << *p << '\t' << &c; // будет выведено A A A, то есть при выводе указателя, разыменованного указателя и адреса будет выводиться сам символ с кодом 65 – это прописная латинская буква A Если мы хотим вывести значение адреса символьной переменной и ее внутренний код надо поступить так: cout << (void*)pc <<’\t’<< (int)*pc // результат: 0x1e76a0c2 65 явно привести указатель к типу void, аразыменованный указатель к типу int.
Операция - & имя дает однозначный результат – адрес данного объекта. Результат операции разыменования *имя_указателя – неоднозначен изависит не только от значения указателя так и от его типа, который указывает размер участка памяти, который будет доступен: В следующем примере один и тот же адрес переменной рассматривается как значение указателей разных типов: {long L = 0x12345678L; char*ch=(char*)&L; int*I =(int*)&L; unsigned long*UN=(unsigned long*)&L; cout << hex; //манипулятор вывода в шестнадцатеричном формате cout << (int)*ch << '\t' << *I << '\t' << *UN << endl; cout << (void*)ch << '\t' << I << '\t' << UN << endl; …} Результат фрагмента программы:
|