1

longlongの配列をObjectiveC関数に渡したい。可能であれば、配列をポインタとして渡して、コピーが行われないようにしたいと思います。私はこのコードを書きました:

+ (int) getIndexOfLongLongValue: (long long) value inArray: (long long []) array size: (int) count
{
    for (int i =0; i < count; i++)
    {
       if (array[i] == value)
           return i + 1;
    }
    return 0;
}

私が渡す

long long varname[count];

2番目の引数として。この配列をポインタとして渡すことができるのか、それともこのメソッドで問題ないのか疑問に思っています。long longへのポインターは必要ありませんが、配列へのポインターは必要です。

4

3 に答える 3

2

C配列は、関数またはメソッドに渡されるときに常にポインターに減衰するため、例ではコピーされません。演算子がすべてのポインタに適用できるため、へのポインタlong longは自動的にの配列へのポインタになります。メソッドは配列を変更しないため、APIでこの事実を強調するために追加することをお勧めします。それ以外は、あなたの方法は問題ありません。long long[]const

于 2012-07-14T15:09:59.807 に答える
2

それポインタとして渡されています(言語の衒学者にもかかわらず)。何もコピーされていません。type[]ほとんどの場合、と同じですtype*

これを確認するsizeof(array)には、メソッドをチェックアウトしてください。と同じサイズであることがわかりますsizeof(void*)

配列へのポインタ、つまりlong longへのポインタが本当に必要な場合は、type**;のようなものを使用する必要があります。ただし、これを実行する唯一の理由は、メソッドから基になる配列ポインターを変更する場合です。これはほとんどありません。

于 2012-07-14T15:10:39.033 に答える
0

Objective-Cは、通常のCの非常に薄いラッパーであるため、これはCで処理される場合と同じように処理されます。つまり、参照渡しです。

+ (int)getIndexOfLongLongValue:(long long)value inArray:(long long *)array size:(int)count
{
    for (int i = 0; i < count; i++)
    {
        if (array[i] == value)
            return i + 1;
    }
}

次に、関数を呼び出すコードで: int myIndex = [object getIndexOfLongLongValue: aValue inArray: varname size: count];

于 2012-07-14T15:09:37.593 に答える