ほとんどの高水準言語(Python、Ruby、さらにJava)は、参照渡しの参照を使用します。明らかにC言語での参照はありませんが、ポインタを使用してそれらを模倣することはできます。これにはいくつかの利点があります。たとえば:C側の参照渡し?
int findChar(char ch, char* in)
{
int i = 0;
for(i = 0; in[i] != '\0'; i++)
if(in[i] == ch)
return i;
return -1;
}
これは一般的なCのパラダイムである:(文字が文字列でない場合は、この場合には、-1
を返す)、いくつかのエラー値を返すことで、異常または誤った状況をキャッチ。これで
問題がある:あなたがしたい場合はどのような2^31 - 1
文字以上の文字列をサポートするために?明らかな解決策はunsigned int
を返すことですが、このエラー値では機能しません。私は簡単のため行っていない、しかし、あなたのアイデアを得るいくつかの明白な最適化があります
unsigned int* findChar(char ch, char* in)
{
unsigned int i = 0;
for(i = 0; in[i] != '\0'; i++)
if(in[i] == ch)
{
unsigned int index = (unsigned int*) malloc(sizeof(unsigned int));
*index = i;
return index;
}
return NULL;
}
;:
ソリューションは、このようなものですエラー値としてNULLを返します。
すべてのあなたの機能でこれを行う場合は、別の引数を1つの関数の結果を渡すことができるように、あなたはまた、ポインタとしてあなたの引数を渡す必要があります。
私が紛失している(メモリの使用以外にも)このアプローチの欠点はありますか?
EDIT:(それは私の質問によって完全に明白ではない場合)私はC++でのいくつかの経験を持っていることを追加したいが、私はかなりC.
Java *は参照渡しを使用していません。値渡しを使用しますが、参照型の場合、渡される値は参照です。参照と実際のパスの間には大きな違いがあります。 PythonとRubyは同じかもしれません - 私は確信していません。 IMOはここでの用語で非常に正確です。 –
@Jon Skeet:はい、PythonとRubyの値はJavaの参照と同じですが、それらのコミュニティでは用語が異なります – newacct
@Jon Skeet:それはそれを考える方法の1つです。私はそれがJavaを参照渡しであると考える傾向がありますが、プリミティブは例外として同じ言葉で出てきます。それぞれ自分自身に。 :) – Imagist