This comes down to a design question: is there are reason to
force your API design to only use that single pointer? The way that mmozeiko provided the API, you can still implement by only every returning a single pointer to the same instance. However, that API can evolve easier.
As to why do not use a void function and no parameters: the function's only purpose is to create side-effects in some system. These types of APIs have a natural tendency to evolve into hard to maintain systems that are extremely inflexible. Over time, they can easily become a huge system of interrelated parts that are hard to understand and introduce subtle interdependencies that were not intended.
Even doing the first step in mmozeiko's layout, the implication is you are modifying the data that you sending in vs. modifying some data in some nebulous area.
Update
Another way to think about it is your functions are a pipeline for manipulating data. In general, when it's clear what the "data-in" and the "data-out" is, the usage of the API and the changes that happens can be better reasoned.
| void multiplyMatrix(int Scalar);
|
vs.
| void multiplyMatrix(int Scalar, matrix* Matrix);
|
Even if we only ever have a single matrix instance in the entire program, the second function is provides an implicit contract based on it's signature: it multiplies the specific Matrix by the given Scalar.
The first API, which matrix is being multiplied? Is this some sort of API for an OpenGL-like state machine? How do I specify which matrix to multiply? Etc...