• Чему будет равно i при таком необычном указателе?

    Это на будущее. Char занимает 1 байт, так что адрес увеличится на 1 в шестнадцатеричном представлении, если к char прибавить 1, а если прибавить 1 к int1, как и к uint32_t(они оба занимают по 4 байта), то адрес увеличится на 4(был 0xAAFFAACB, а станет 0xAAFFAACF), тип double занимает 8 байт, то есть если, например, переменная типа double занимала адрес 0x123AB111, то будет занимать 0x123AB119 при увеличении указателя на 1.
    "К указателям могут применяться только две арифметические операции: сложение и вычитание. Для понимания арифметических действий с указателями предположим, что p1 - это указатель на целое, содержащий значение 2000, и будем считать, что целые имеют длину 2 байта. После выражения

    p1 ++;

    содержимое p1 станет 2002, а не 2001! Каждый раз при увеличении p1 указатель будет указывать на следующее целое. Это справедливо и для уменьшения. Например:

    р1 --;

    приведет к тому, что p1 получит значение 1998, если считать, что раньше было 2000

    Естественно, все не ограничивается только уменьшением или увеличением. Можно добавлять или вычитать из указателей целые числа. Выражение

    p1 = p1 + 9;

    приводит к тому, что указатель p1 указывает на девятый элемент по сравнению с элементом, на который он указывал до присваивания.

    Помимо добавления или вычитания указателей и целых чисел, единственную операцию, которую можно выполнять с указателями, - это вычитание одного указателя из другого.
    ."100120ea0ab7436d8bd981033bea675e.png
    Ответ написан
    Комментировать
  • Чему будет равно i при таком необычном указателе?

    1028. При инкременте указателя к нему добавляется sizeof от того, на что он указывает, то есть
    i++;
    эквивалентно
    (int&)i += sizeof(uint32_t);

    По поводу скомпилировать, если задать язык как C, а не C++, то он это проглотит, так как менее строгий в плане приведения типов (целое число приводить к указателю не безопасно). Чтобы скомпилировать в C++, нужно немного подправить код.
    Ответ написан
    1 комментарий
  • Почему string - это char*?

    Я так понял, что std::string не имелся в виду.
    То есть суть вопроса такова: почему строки передают как char*, хотя это тип указателя на один char.

    Дело в том, что массивы в C нельзя передавать как параметр функции, указатель на массив нельзя сохранить.
    В результате массив, например char[8], принято передавать как указатель на его первый элемент: char*. Более того, при передаче массива в функцию он автоматически разлагается (decays) до указателя на первый элемент.

    Остальные элементы получаются при помощи адресной арифметики: *(p+3) или p[3], что одно и то же. Итак, указатель в коде C может указывать как на одну переменную, так и на целый массив (точнее, его начало).

    Для массивов int или любого другого типа обычно вместе с указателем на первый элемент передают размер массива. Но строки C завершаются нулевым символом, поэтому здесь длина известна и так. Вот и получается, что char* используют вместо char[N].

    Edit: На самом деле, в C можно объявить указатель на массив:
    int (*arr)[10] = malloc(sizeof(*arr) * 5);
    Не помню, чтобы я видел такую конструкцию в реальном коде.
    Ответ написан
    1 комментарий
  • Чем отличается char* от int*, float* и других в Си?

    @res2001
    Developer, ex-admin
    Размер указателя один и тот же, если вы это имеете ввиду.
    char* отличается от int* тем, что первый указывает на область памяти в sizeof(char) байт, а второй в sizeof(int) байт. Это важно, например для адресной арифметики.
    Например имеем:
    int ival[] = {0,1,2,3};
    char* pc = "This is a string";
    int* pi = &ival;

    Если мы делаем pc++, то к pc прибавляется sizeof(char), а в случае pi++ к pi прибавляется sizeof(int).
    А так же, когда мы делаем разъименование, то получаем в результате соответствующий тип:
    *pc - дает char
    *pi - дает int
    Если бы не было типизации указателей, то не было бы и адресной арифметики и разъименования. Посмотрите, например, что можно сделать с указателем на void.
    Ответ написан
    5 комментариев
  • Есть ли дистрибутив linux похожий на MacOS?

    zelsky
    @zelsky
    Deepin. Думаю сам перехать с еос после 2.5 лет использования. Причины:
    1. Основанный на Debian а не на убунте как еос
    2. Свой софтваре центр.
    3. Ну и конечно закрыте разработки еос
    Ответ написан
    Комментировать
  • Какой код показать заказчику/работодателю?

    @jaxel
    На что лично я бы обратил внимание:
    1. Оформление кода. Весь код должен строго придерживаться одного стиля. Идеально, если он будет соответствовать актуальному стандарту, например PSR-2. Обязательно говорящие имена переменных, никаких a, b, row, foo и прочей жести. Именование классов в соответствии с названием используемого паттерна. Код должен быть самодокументирующимся. Обязательно везде PHPDoc комменты в соответствии со стандартами. Комменты с описание особо сложных мест.

    2. Если это фреймворк - то соответствие принятым в фремворке стандартам и рекомендациям. Никакой самодеятельности.

    3. Общая архитектура проекта. Никаких портянок в контроллерах. Чёткая разбивка кода по сервисам. Никаких адовых функций по 100500 строк. Логичное разделение кода по классам. Применение подходящих паттернов для решения задач.

    4. Минимум велосипедов. Если есть отличная библиотека для решения задачи, а человек пишет свой говнокостыль - это явный минус. Если есть готовая функция - аналогично. Кроме случаев, когда готовая библиотека чем-то не подходит.

    5. Использование менеджера пакетов для проекта. Ну думаю в 2016 году без него уже никто не кодит:)

    6. Думаю разбираться в работе сложных алгоритмов я бы не стал, и ограничился тем, что перечислил выше.

    7. Я бы отдавал предпочтение коду на фреймворках. Так же не плохо, если это сборная солянка на готовых компонентах, заточенная под свои задачи.

    8. Полный самопис - это явный минус. Не использовать в наши дни хорошие готовые решения, делая вместо этого стрёмные, никому не понятные велосипеды - это глупость.

    9. На CMS код можно даже не присылать. Там в любом случае будет говнокод. Сами CMS к этому обязывают:)
    Ответ написан
    Комментировать
  • Обязательно ли в коде придерживаться стандарта ширины строки в 80 символов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Это правило необходимо для того, что бы код удобнее читался (что бы не приходилось пользоваться горизонтальным скролом, и вертикального хватает). Вглянул на код - и все видно.

    Других причин следовать этому правилу особо нет. Я стараюсь придерживаться этого правила и для html, делая переносы строк в случае с большим количеством аттрибутов.
    Ответ написан
    Комментировать
  • Почему не прописывает цифры?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Вам стоит использовать
    printf("Time %d\n", t);
    Спецификатора %t не существует (полный их список можно посмотреть здесь).
    Ответ написан
    2 комментария
  • Есть ли проги для автопостинга в список пабликов вк?

    @vilgeforce
    Раздолбай и программист
    Не ошиблись ли вы ресурсом с вопросом о спаме?
    Ответ написан
    Комментировать
  • Закончил учиться на программиста - как быть дальше?

    MpaK999
    @MpaK999
    Буду!
    — Мой отец никогда не учился в колледже и поэтому ему было важно, чтобы я учился.
    — Это мне знакомо.
    — Я окончил колледж, звоню по междугороднему и говорю: «Пап, я окончил колледж.». Он говорит: «Найди работу.». В двадцать пять я ему звоню снова и говорю: «Теперь что?». Он говорит: «Не знаю, женись.».
    — Точно, нельзя жениться так просто. Я как тридцатилетний мальчик.
    — Наше всё поколение воспитано женщинами. Может быть, нам действительно нужна женщина? Это ответ на наши проблемы?
    (с) Бойцовский клуб, Чак Паланик

    Устройтесь на работату.
    Ответ написан
    Комментировать
  • Java for Android - с чего начать?

    pyJIoH
    @pyJIoH
    Мой путь к Java из другого языка, а потом и Android был таким:

    1. Прочитал несколько базовых книг:
    Справочник Шилдта для понимания синтаксиса, коллекций, дженериков и т.п.
    Брюс Эккель Философия Java для понимая концепции Java.

    2. Одновременно с первым пунктом прорешал на java порядка 100-150 задач на acm.timus.ru

    3. Через пару месяцев пошел на собеседование java developer'a. Там узнал в каких местах знаний не хватает особенно. Прокачал, пошел снова — профит (если не профит — повторят до профита :o) ).

    4. Параллельно начал изучать android по принципу — ставишь задачу (например, написать крестики-нолики) и читаешь все что связанно с ее решением.
    Ответ написан
    3 комментария