1. C++ / Говнокод #1951

    +61.8

    1. 1
    (*(((void*)*)(pData))=p;

    думал о чем-то постороннем)))

    Запостил: AntiGluk, 09 Октября 2009

    Комментарии (31) RSS

    • Скобки лишние убрать, и всё понятно станет: *((void**)pData) = p;
      Я бы кстати приведение типа в правой части использовал, так привычнее.
      Ответить
      • Ну и «двойной» указатель использовать бы не пришлось.
        Ответить
      • да все это сводится к самому простому pData=p;
        Ответить
        • Ты, что, разыменования не видишь?
          Как минимум *pData=p. Хотя тяжело сказать. Здесь баланс скобок нарушен.
          Чья в этом вина: твоя, постер, или автора сего кода?
          Ответить
          • учитывая что pData и p - имеют тип void* то сводится к pData=p;
            действительно баланс нарушен - вина в этом моя :( :)))
            Ответить
            • А разыменования указателя ты все равно не видишь.
              void* -- это т.н. generic pointer, т.е. указатель на неструктурированный участок памяти. В данном случае по этому адресу записывается значение указателя p.
              Ответить
              • ну так это естественно!
                или вы считаете что правильно будет *pData=p??
                Ответить
                • да
                  Ответить
                  • если void* pData то куда вы его разыменуете?
                    Ответить
                    • А для этого здесь и приведение типа
                      Ответить
                      • так суть в том что нужно pData приравнять к p
                        они одного типа!
                        Ответить
                        • Нужно по задаче или по тому что они одного типа? Если последнее, то, на самом деле, тип void* не говорит ни о чем, кроме того, что pData указатель (не известно на что он указывает), а значит pData может указывать и на void*. Для того, чтобы так было автор кода привел pData к типу void**. Короче говоря, похоже, что данный код записывает в память, на которую указывает pData значение указателя p.
                          Ответить
                          • да я автор кода! *аж стыдно*
                            он просто приравнивает указатели
                            Ответить
                            • Так бы сразу и сказал, что по задаче, а то заладил: одного типа, одного типа.
                              Ответить
                      • тут безсмысленное приведение - pData приводят к void*. а оно и так void*
                        Ответить
                        • pData приводят не к void*, а к void** (указатель на указатель на неструктурированную область памяти)
                          Ответить
                          • неправда, цель была совершенно другая. вас сбил баланс скобок.
                            тут просто приравниваются указатели как я сказал выше
                            Ответить
                            • И похоже не меня одного (http://govnokod.ru/1951#comment8304). Так что, ждем кода с исправленным балансом скобок
                              Ответить
                      • берут от void* адрес и сразу же его разыменовывают
                        Ответить
            • Напиши код точно, а то все равно что гадаю на кофейной гуще...
              Ответить
            • Черт, опять баланс скобок нарушен:( (:))
              Ответить
    • для полной нирваны не хватает скобок вокруг void, переменной p и всего выражения :)))
      Ответить
    • Вас Лисперы что ли покусали?
      Ответить
    • Прошу модераторов перенести код в раздел Си, т.к. к C++ он имеет малое отношение.
      Ответить
    • самое смешное будет, если pData или p будет 0
      Ответить
    • - Алиса, милая, мы с тобой уже давно вместе. Скажи, ты согласишься выйти за меня замуж? - я проговорил заветные слова и, достав в один момент шкатулочку, открыл её; отблеском зажжённых свечей в ней заиграли мелкие камешки.
      Ответить

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