Задать вопрос
  • Есть ли разница между *p++ и p++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Разница как бы есть. В одном случае у вас *(p++), а в другом просто p++. И то и другое сдвинет указатель p на одну ячейку вправо, т.е. код имеет ровно тот же результат. Но в случае с * вы еще и адрес p, который там был до увеличения, разименуете, т.е. получите доступ. Но просто такое выражение, где вы его разименовываете и ничего с ним не делаете не имеет смысла. Его можно использовать, если вы со значением что-то делаете, например:
    void Copy(char *src, char *dst) {
        while (*src) {
          *dst++ = *src++;
        }
        *dst = '\0';
      }


    Тут вы значение по адресу src берете и записываете в адрес dst. Но из-за ++ оба указатлея сдвинутся. Получается копирование сишной строки.

    Но делать просто *p++; смысла никакого нет. Это примерно то же что и:
    int i;
    i;

    Вот выражение `i;` - оно как бы получает доступ к i, но со значением ничего не делает. Это странный и бесполезный код.

    Так что * у вас там явно лишняя.
    Ответ написан
    Комментировать
  • Почему код выкидывает исключение переполнение стека?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    У вас массив внутри класса, класс - локальная переменная. Получается массив на стеке. На 4 миллиона ячеек. Но стек ограничен и вот он переполняется. Стандартного размера не хватает. Надо поднять размер стека опциями линкера.

    Или экземпляр класса создавайте в куче, через new, и храните в unique_ptr.

    А по коду: не используйте эту сишную арифметику указателей. У вас двумерный массив, вы и обращайтесь везде через 2 индекса в квадратных скобках. Так понятнее код будет.
    Ответ написан
    Комментировать
  • Дайте совет по реализации схемы ЖД. Как лучше сделать?

    @kalapanga
    В качестве примера к ответу alex_ak1 можете посмотреть эту статью: Контейнер визуальных объектов
    Там как раз создание графических объектов и работа с ними.
    Ответ написан
    1 комментарий
  • Как разработать GUI на C++?

    Rou1997
    @Rou1997
    В какую строну мне идти?

    По-правильному, нужно идти в сторону адекватных "хотелок", GUI на "голом" WinAPI - это изначально было неактуально, поскольку был Borland, а сейчас, да еще и красивый, это вообще абсурд.
    Как минимум, нужно писать свой фреймворк, чтобы в следующий раз было легче и код имел архитектуру, а не делать на WinAPI непосредственно, но создание фреймворка тоже много усилий потребует, а применений ему очень мало, почти уверен, что у вас их вообще нет, просто каприз.
    Ну, а по теме, GDI+ используйте, можно сделать красиво как на WPF, но без аппаратного ускорения, но DirectX и OpenGL для GUI вы просто не осилите, уж совсем много придется сделать.
    Ответ написан
    4 комментария