現在、すべてのCパラメーター受け渡しルールが何であるかわからないため、この回答は少し古くなっている可能性があります。アプリケーションとそれらのアプリケーションが呼び出すライブラリを構築する一般的な方法から、C関数からの戻り値にはステータスが含まれるため、関数の呼び出し元はステータスコードに応じて決定を下すことができます。
関数に入力パラメーターを変更させたい場合は、参照によってそれらのパラメーターを渡します。&my_val
ここで、int my_val;
。*my_val
また、関数は、その値を取得するために、このようにmy_valを逆参照する必要があります。
また、パフォーマンス上の理由から、アプリケーションがパラメータの値をローカル変数にコピーすることを気にしないように、アドレス(参照による)が望ましい場合があります。そのプロローグコードはコンパイラによって生成されます。単一のパラメーター、char、intなどはかなり単純です。
私はC++に慣れているので、C++での参照渡しは間接参照を必要としません。コンパイラのコードがそれを処理します。
ただし、構造体へのポインターを渡すことを検討してください。
struct my_struct
{
int iType;
char szName[100];
} struct1;
struct my_struct *pStruct1 = &struct1;
構造体に、初期化時に一度入力され、プログラム全体で参照されるルックアップデータが含まれている場合は、値で構造体へのポインターを渡しますpStruct1
。その構造を埋めたり、既存のデータを変更したりする関数を作成している場合は、値で構造へのポインターを渡します。それでも、構造体ポインタが指すものを変更することができます。
一方、ポインタにメモリを割り当てる関数を記述している場合は、ポインタのアドレス(ポインタへのポインタ)を渡すと、ポインタ&pStruct1
が正しいメモリを指すようになります。