Указатели в С++ для начинающих Поверхностное знакомство

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Указатели в С++ для начинающих Поверхностное знакомство

Что такое Указатели в С++ для начинающих приходится понимать почти сразу.
Не буду описывать все способы использования. Здесь только поверхностно.
минимум усилий для изучения С++

  • Указатели в C++ представляют собой вид переменных и хранят адрес памяти.(значение переменной)
  • Для начинающих важно адрес памяти и значение переменной очень разные вещи.
  • По адресу в памяти могут располагаться абсолютно любые объекты
  • Указатели = Указатели на адрес памяти.
  • Однако Указатели на адрес памяти как-то длинно и называют Указатели
  • Для объявления указателя в C++ используют символ звездочка. В определении переменных звездочка должна стоять перед каждым указателем

Код C++. Указатели. Объявление

Теперь при обращению к указателю как к переменной получим не значение переменной i, а адрес, который хранится в объявленном указателе. Для начинающих в С++ важно осознать этот момент.

Код C++. Указатели. Обращение к указателю как к переменной. Вернет адрес.

При таком обращении получаем что-то типа 0*1f5c — Это адрес памяти, которое хранится в Указателе. При попытке вывода на экран — не была поставлена звездочка и компилятор решил, что мы хотим получить хранимый адрес памяти.

Код C++. Указатели Присвоение указателю значения и вывод значения указателя на экран.

Обращаем внимание. В память по адресу из указателя будет записано число. Сам указатель при этом не меняется. Как он хранил один адрес памяти, так его и хранит. Но в области памяти произошло изменение. Указатель словно указал пальцем Поменять тут.

Стоит отметить, что с символьным типом код Borland С++ выглядит чуть по другому.
Код C++. Указатели Присвоение указателю значения и вывод значения указателя на экран.

Разница в том, что в первом случае при изменении участка памяти мы писали *i , Во втором случае писали без звездочки сh

Существует еще много информации по работе с указателями. Но для начинающих этого материала может с лихвой хватить для восприятия.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Один комментарий: Указатели в С++ для начинающих Поверхностное знакомство

  • Sergio говорит:

    Помогите найти косяк… Похоже я запутался с указателями. 😳
    Интересуют вопросы в тексте программы, а также самый главный: как сделать так, чтобы закомментированный кусок заработал?

    Извиняюсь за корявые двойные кавычки…

    Автор сайта отвечает:
    вы, похоже, время теряете на то, чтобы каждый раз код руками в комментариях написать. Можно ведь скопировать его из блокнота, только подправлять комментарии нужно будет. (исходники ведь не с воздуха, они на диске хранятся, открыть блокнотом можно) И никаких проблем с самим кодом не будет.
    А иначе и вы и я терем много времени. Чтобы расшифровывать такой вид кода время ведь тоже нужно.

    Как ни странно, но код в комментах никогда руками не набирал, копировал из Borland 5.02 C++.
    [& quot]; — тег html, двойная кавычка.

    Автор сайта отвечает:
    я его расшифровал, знания html небольшие, но есть) За это не парьтесь.
     
    Не ленитесь открывать блокнотом. Оттуда не так криво копирует как из сред разработок.
     
    и такие вот вопросы, как этот, лучше в форумы задавать. Там ответят точно быстрее.
    Разбираться в чужом коде иногда проблема. Стиль написания совсем не мой.

    Почему отображается только первая цифра? Потому что char *mQ[5]; обозначает массив из 5 символов. Т.е. каждый элемент массива вмещает не больше чем 1 символ, массив одиночных символов не есть массив слов.

    Ответ на остальное не знаю когда напишу.

    И правда, не хватает форума на вашем сайте 😀

    Автор сайта отвечает:
    числа это совсем не левые, а коды символов, которые принадлежат элементам массива. Вы же объявили тип int и присваиваете к нему тип char. символу "1" соответствует числовой код 49 и так далее.
     
    Пример прост.

    то же самое происходит у вас.

    Спасибо, с этим вроде разобрался…

    Автор сайта отвечает:
    И в строке 41 попробуйте
    char *B[5] = {0,};

    Пробовал, от «вылетов» и прочих глюков помогло, спасибо.
    Но вот по части if-ов у меня явный косяк, не работает — не выводятся элементы массива указателей… 😕

    Автор сайта отвечает:
    У вас есть условия на если равно, а на если не равно условий у вас нет, так как сама по себе программа написана криво (насколько я понял косяк с массивом, где вместо слов запоминаются символы), то в итоге не получается ни одного выполненного равенства, так как их нет, то программа ничего и не делает, нет и нет, условий на это нет.

    и еще в глаза бросилось, что присваивание в конце не к разыменованному массиву, а к указателю идет. (это так, просто в глаза бросилось, возможно ошибка, возможно так и задумано, не знаю)

    Это намного упрощенная версия моей программы, поэтому все условия и не писал 😮

    Автор сайта отвечает:
    Так как вы достаточно активно изучаете мои материалы, то держите подсказку. Недавно в одном из комментариев я просил именно вас проверить в вашем проекте что-то похожее (вы там про все способы описания массивов слов спрашивали), но похоже, что вы решили, что вам это не нужно и зря.

    Это относится к строке 42
    ===================

    Это не решение, а подсказка.
     
    и еще вместо приведения типов (int = char) используйте функции работы со строками. Вы же хотели строку к цифре привести, так и используйте готовую для этого функцию. atoi (http://ru.wikipedia.org/wiki/Atoi)
    Пример

    Это вам для решения тоже нужно знать.

    Огроменное спасибо за atoi, если бы раньше знал про её существование, то и не задавал бы глупых вопросов… 😉

    P.S. Хотелось бы в будущем на вашем ресурсе увидеть статью (а может и серию статей): Преобразование типов переменных: int в char, char в int и др.. Новичкам, как мне, это будет крайне полезная информация.
     
    Выложу кусок кода, который работает как изначально и задумывалось, может кому-нибудь пригодится…

     
    admin, честное слово, на этот раз копировал из блокнота))

    Автор сайта отвечает:
    Потом исправлю, только хочу пояснить, что решение какой-то задачи без условия самой задачи новичкам полезным в принципе быть не может.

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор рекурсии

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок