Can’t you show show the complete code? Especially how the queue is created?
The pointer &xMessage is the address of the data that must me copied into the queue space.
You could say that you are passing the contents of the struct.
When you want to pass big amounts of data to a queue, it can be more efficient to only pass references (pointers) to the queue. In that case, you would pas a pointer to a pointer to xQueueSendToFront()
Ok, now you are passing a pointer to a pointer. Did you also change the code that sends the structure pointers to the queue? What does that look like now?
If you pass a pointer to a structure to xQueue send, then the queue makes a copy of the pointer, but NOT the stucture. That means the sender needs to use a different structure for each send, or it it changes the contnets of the structure, it will change what the task that gets that pointer sees in the structure. Basically, somewhere you need to store all the different values of the structures you want to send. If you send the structure, then the queue will copy ALL the data into the queue, and then copy all the data out of the queue, which is simpler programming, but a lot of work for the processor. If you send just a pointer to the structure, then you avoid all the data copying, but need to manage the buffers.