Что такое хорошее определение "указателя userdata"?

Я искал хорошее объяснение, но не могу найти его.

Я мог бы попытаться написать сам, но я бы предпочел, чтобы кто-то с лучшим английским языком мог помочь мне объяснить это для Zan Lynx в комментарии здесь.

... и кажется, что должно быть хорошее объяснение где-то, почему не здесь?

Ответ 1

Когда библиотека управляет некоторыми структурами данных от имени программы (например, окна в графическом приложении управляются ОС), она обычно сохраняет содержимое этих структур частным. Однако, как правило, полезно, чтобы программа поддерживала некоторые дополнительные данные, специфичные для использования этими структурами в программе. Поэтому библиотека часто предоставляет доступ к полю (часто называемому пользовательским данным), которое оно хранит с каждой структурой.

Общепринятое использование пользователем поля данных программой заключается в распределении некоторой памяти каждый раз, когда программа запрашивает библиотеку для создания структуры и для хранения указателя на эту память в поле данных пользователя, предоставляемом библиотекой, следовательно термин userdata pointer.

Ответ 2

Посмотрите sqlite3_exec() - он вызывает обратный вызов (третий параметр) для каждой полученной строки и передает указатель, который вы предоставляете (четвертый параметр ) в этот обратный вызов. Это может быть указатель на любой объект, который вы пожелаете - вы должны соответствующим образом настроить его, прежде чем сможете получить доступ к заостренному объекту. Этот объект называется объектом userdata, а указатель на него называется указателем userdata.

В случае sqlite3_exec() вы можете передать указатель на контейнер, который должен хранить все извлеченные строки таблицы после завершения запроса.