The main question isn't about performance, but semantics, and whether your function modifies the data in the structure.
If your function modifies the structure, then passing a pointer will let the caller see the changed data in the structure. In this case, passing a copy will likely be wrong, since your function will modify a copy which is then (presumably) discarded. Of course, it is possible that your function modifies the data, but you don't want the modifications, in which case a copy is the right thing to do, to protect the original values from changes.
If your function doesn't modify the structure, then there's no reason to copy the values, since they will only be read.
If you are not comfortable with the concept of passing pointers to structures, you should get some practice, because it is the typical way of dealing with structures in C and C++.
As far as performance goes, it's more work to copy the structure, but it's fairly minor in the scheme of things. Keep your mind on the semantics of the code first.