Javaにはポインタ演算はありません。これがあなたが求めていることだと思います。たとえば、malloc
タイプのポインタを返すと想像してくださいint
int* malloc(size_t size)
{
//
}
基本的にはへのポインタであるポインタを受け取る可能性がありますarray
。次に、通常の配列のようにインデックスを付けます。
int* arr = malloc(10 * sizeof(int)); // 10 contiguous int(s).
問題は、C
関数のオーバーロードがないことです。したがって、ジェネリックを作成する方法を見つける必要がありますmalloc
。そうしないと、malloc
タイプごとに異なる結果になります。解決策は、必要なバイト数を送信することです。次に、好きなようにインデックスを付けることができます。これにより、柔軟性が高まり、すべてのソリューションに1つになります。
int* i = (int*)malloc(10 * sizeof(int)); // 40 bytes if int = 4 bytes
char* c = (char*)malloc(10 * sizeof(char)); // 10 bytes if char = 1 byte
int thirdElement = i[3]; // third element. 12 bytes away from (*i)
char secondElement = c[2]; // second element. 2 bytes away from (*c)
したがって、全体的な考え方は、から取得したメモリにどのようにインデックスを付けるかは問題ではないということmalloc
です。新しく作成された配列のタイプを指定して、適切にインデックスを作成するだけです。 void*
これは、インデックス作成方法を指定していないメモリに配置するためのポインタであることを意味します。