あなたはおそらくこれを複雑にしすぎています...
構造体の配列を渡したい場合は、何でも配列を渡すのとまったく違いはありません。配列を取得したら、アドレスを取得するのは簡単です。簡単な例を挙げましょう。
この構造体があるとしましょう:
typedef struct s {
int a;
int b;
} mys;
で静的に宣言したい場合は、次のmain()
ことができます。
int main(int argc, char *argv[])
{
mys local[3];
memset(local, 0, sizeof(mys)*3); // Now we have an array of structs, values are
// initialized to zero.
// as a sanity check let's print the address of our array:
printf("my array is at address: %#x\n", local);
changeit(local, 3); // now we'll pass the array to our function to change it
これで、配列を受け入れて値を変更する関数を作成できます。
void changeit(mys remote[], int size)
{
int count;
printf("my remote array is at address: %#x\n", remote); //sanity check
for(count = 0; count < size; count++) {
remote[count].a = count;
remote[count].b = count + size;
}
}
main()
それが返されたら、次のような他のループで値を出力できます。
for(int count = 0; count < 3; count ++)
printf("struct[%d].a = %d\n struct[%d].b = %d\n",
count, local[count].a, count, local[count].b);
そして、次のような出力が得られます。
>> ./a.out
my array is at address: 0xbf913ac4
my remote array is at address: 0xbf913ac4
struct[0].a = 0
struct[0].b = 3
struct[1].a = 1
struct[1].b = 4
struct[2].a = 2
struct[2].b = 5
したがって、同じ配列 (同じアドレス) であることがわかります。これが、構造体の配列を他の関数に取得する方法です。それで解決しましたか?