No te podria decir si el uso de pointer no es eficiente, pero sin duda, es mucho mas eficiente que pasar toda una estructura. Al pasar pointers de una estructura a como argumento de una funcion, estas manipulando pointers nada mas, la estructura en si no es "usada" al pasar un pointer hacia ella, pero cuando pasas la estructura en si como argumento, estas haciendo una especie de "copiar y pegar" con la estructura