C/C++

Объясните пожалуйста одну штуку в языке программирования С++.

  • Изучаю С++, запнулся на теме указатели, два вопрос по ним: 1. Для чего они. 2.Как их делать и использовать(всм, указатель, ссылку и разыменование).
  • И вот при создании очереди, к примеру номер телефона и имя человека, и надо вывести такой стек, почему в конце пишут имя класса, конструкции, а потом из него делают указатель, на что то новое, к примеру на следующий элемент в приведённом, мной стеке, а потом в мейне, пишут этот указатель, и присваивают значение новое и типа текущее(в инете две недели искал, так и не нашёл путёвой инфы).
Указатель - это переменная для хранения адреса. Тип указателя - позволяет правильно интерпретировать то, что находится по адресу (т.е. разыменовывать) а так же позволяет вычислять другой адрес путем арифметики указателей.
допустим в памяти лежат буквы, первая буква по адресу 00, вторая 01, третья 02 и т.д.
абакакошкащенокграммвелик
сделаем указатель типа буква: буква* БУКВА = 00; т.е. указывает на начало этой памяти
напечатать *БУКВА - напечает то что лежит по 00 адресу в формате буква - тоесть "а".
БУКВА = БУКВА + 3; - увеличим значение указателя на 3. Какой адрес будет? 00 + 3*длина буквы = 00 + 3*1 (длина буквы - это и есть одна буква) = 03.
напечатать *БУКВА - выдаст "к".
сделаем указатель типа слово_из_5_букв СЛОВО = 00.
напечатать *СЛОВО - выдаст "абака"
Хоть адрес у первой БУКВА и СЛОВА одинаковый, а интерпретация - разная.
СЛОВО = СЛОВО+1;
У этого указателя адрес расчитается так: 00 + 1*5(длина слова в буквах) = 05
Тепереь напечатать *СЛОВО выдаст "кошка".
А если напечатать *((слово_из_5_букв*)БУКВА) - возмется адрес БУКВА но интерпретироваться будет как слово из 5 букв. Выдаст это "какош".
напечатать СЛОВО; выдаст адрес указателя "05".
В си и с++ указатель типа char выдаст не адрес, а строку. Ибо так устроена интерпретация строк. А чтобы вывести именно адрес нужно как в примере выше заставить думать что это указатель другого типа. Например как будто это указатель на число (int*) или сферический (void*) в вакууме.

Эх, учители должны получать кууучу денег!
AW
Anthony Wanderwoodson
51 416
Лучший ответ
Иван Самсонов Указатель типа char выдаст адрес. То, что этот адрес может быть интерпретирован как адрес первого элемента строки -это лишь побочный эффект.
 #include  
#include // snprintf
#define BUF_SIZE 16
const char* msg = "Hello World";
int main( int argc, char* argv[] )
{
const char* ptr = msg;
char buf[BUF_SIZE];
std::cout
Нормально учи и все получится.