- Изучаю С++, запнулся на теме указатели, два вопрос по ним: 1. Для чего они. 2.Как их делать и использовать(всм, указатель, ссылку и разыменование).
- И вот при создании очереди, к примеру номер телефона и имя человека, и надо вывести такой стек, почему в конце пишут имя класса, конструкции, а потом из него делают указатель, на что то новое, к примеру на следующий элемент в приведённом, мной стеке, а потом в мейне, пишут этот указатель, и присваивают значение новое и типа текущее(в инете две недели искал, так и не нашёл путёвой инфы).
C/C++
Объясните пожалуйста одну штуку в языке программирования С++.
Указатель - это переменная для хранения адреса. Тип указателя - позволяет правильно интерпретировать то, что находится по адресу (т.е. разыменовывать) а так же позволяет вычислять другой адрес путем арифметики указателей.
допустим в памяти лежат буквы, первая буква по адресу 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*) в вакууме.
Эх, учители должны получать кууучу денег!
допустим в памяти лежат буквы, первая буква по адресу 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*) в вакууме.
Эх, учители должны получать кууучу денег!
Иван Самсонов
Указатель типа char выдаст адрес. То, что этот адрес может быть интерпретирован как адрес первого элемента строки -это лишь побочный эффект.
Нормально учи и все получится.
Похожие вопросы
- Чем отличаются языки программирования ???
- На каком языке программирования (Assembler / С / С++) лучше будет написать компилятор для своего языка программирования?
- Что такое #include <iostream>, std using namespace std В языке программирования C++?
- C#; C++; python изучение языков программирования
- Почему изучение C++ как первый язык программирования даёт такое сильное преимущество во всех планах чем изучение
- Язык программирования c++
- На каком языке программирования написан C (Си)?
- Помогите решить данное задание, на языке программирования с++
- Помогите решить задачу на языке программирования Си, пожалуйста
- Посоветуйте легкие языки программирования, который можно изучить в 14 лет.(читать описание)