Как начать понимать указатели
Тема указателей для многих является той точкой, на которой многие новички спотыкаются. Секрет такого ступора объясняется довольно просто, из мира языка С++ Вы погружаетесь в мир архитектуры компьютера и выполнения программ. Поскольку Вы его не знаете и почему-то авторы книг/курсов/статей не хотят Вас с ним знакомить, этот процесс может проходить довольно болезненно. В данном статье мы попытаемся устранить этот недостаток.
Любая программа перед тем как начать исполняться полностью загружает свой код в ОЗУ или проще говоря оперативную память. Оперативная память в урощенной схеме представляет из себя таблицу адресов и значений.
Есть такой термин как разрядность и применяется он для ОС, шины, адресного пространства. Он означает, сколько одновременно бит может обработать устройство. Вот один из примеров оперативной памяти с адресной разрядностью в 8 бит(2^8 = 256 адресов) и разрядностью шины 16 бит.
Давайте посмотрим на примере простой программы, как это может работать в упрощенной схеме.
После того, как компилятор пройдется по вашему коду, он заменит все ваши имена переменных на адреса и заполнит как-то так оперативную память
Соответсвенно адрес у переменной не меняется и если мы присвоим ей новое значение, то оно изменится только в столбце "значение по адресу".
Вот мы и подошли к самому главному - указатель, это совершенно обычная переменная которая хранит АДРЕС. У нас есть переменные, которые хранят числа, которые хранят буквы, которые хранят строки. А теперь просто появились переменные, которые хранят адрес.
Что бы ОБЪЯВИТЬ указатель, достаточно указать перед именем переменной звездочку. Это даст понять, что в этой переменной вы будете хранить адрес определенного типа. На самом деле хранение в памяти значений намного сложнее, поэтому компилятору надо знать тип хранимого адреса, что бы правильно его получить из памяти.
Для работы с указателем используются две новые операции.
& - взятие адреса у какой-либо переменной
* - получение значение по адресу в указателе
Если Вы будете держать в голове эту простую схему с оперативной памятью, то указатели будут даваться Вам намного легче.
Удачи в обучении.
Язык программирования C иностранным языком не признали. Окончание.
Для жаждущих продолжения =)
В продолжении http://pikabu.ru/story/programmistyi_na_c__samyiy_bolshoy_ra...
и http://pikabu.ru/story/yazyik_programmirovaniya_c_inostranny...
В конечном итоге сегодня суд постановил:
"Оставить решение суда без изменения, жалобу без удовлетворения".
Антимонопольная служба с апелляцией обломалась, суд остался на стороне организации и ЯП "С++" иностранным языком не признал, а многие надеялись ;)
Язык программирования C иностранным языком не признали.
В продолжении вялотекущего судебного разбирательства http://pikabu.ru/story/programmistyi_na_c__samyiy_bolshoy_ra...
Думаю некоторым будет интересно, что же там происходит:)
По итогу 02.06.2016 суд решил признать незаконным решение ФАС.
Из приведенных заключений экспертов следует, что изображение, размещенное обществом на рекламном баннере, не является надписью или текстом на иностранном языке, а представляет собой фрагмент кода компьютерной программы, выполненной на языке программирования С++
С полным текстом решения можно ознакомится тут http://kad.arbitr.ru/PdfDocument/0235635f-01ce-4589-aaff-fe8...
Но антимонопольная служба так просто не сдается и подала апелляцию. Следующее заседание назначено на 03.08.2016.
Зов помощи к программистам
Привет, пикабу. Знаю что тут много программистов. Так вот, может быть кто-то из вас может посоветовать годные сайты или литературу(язык C++). Хочется по проверенному изучать.Все таки выжпрограммисты. Спасибо. Кто любит минусить- для вас в комментах сюрпризик^^
Реализация кортежа на C++11
Кортеж — это упорядоченный набор фиксированной длины. В отличие от массива, кортеж может содержать элементы разных типов.
В языке Python кортеж является стандартным типом данных и позволяет делать вот так:
Но Python использует динамическую типизацию, а в C++ типизация статическая. Как же создать подобную структуру и не сломать систему типов? Используем C++11 и одну и главных особенностей этого стандарта — шаблоны с переменным числом аргументов (variadic templates).
Обычные шаблоны используются в C++ повсеместно, большинству они знакомы. Шаблоны с переменным числом аргументов позволяют передавать произвольное число параметров в шаблон. Вот небольшой пример, демонстрирующий эту возможность языка:
Теперь, собственно, реализация кортежа. Для этого мы воспользуемся рекурсивным наследованием структур. Так выглядит объявление структуры:
Также нам понадобится вспомогательная структура, позволяющая получить тип элемента по его индексу и тип оставшейся части кортежа:
Теперь мы можем написать функцию доступа к элементу по его индексу:
Конечно, сам кортеж и доступ — это хорошо, но мы же хотим его создавать! Для этого сперва реализуем заполнение кортежа.
Теперь легко реализовать и функцию создания кортежа. Почему не конструктор? В нем не работает автоматическое выведение типов, а мы же не хотим писать огромный список параметров ;)
Ну и напоследок демонстрация того, что у нас получилось. Распаковку и групповое присваивание пока не демонстрирую, и так достаточно кода :P
P.S. Не судите строго — это мой первый пост. Возможно тема покажется сложной, я не привожу здесь подробное объяснение. Пишите в комментарии что не понятно, постараюсь ответить.