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