узнать размер массива:
sizeof(result) / sizeof(result[0])
но в нашем случае должно быть все по другому.
узнать размер массива по указателю гарантированно никак нельзя (если не пользоваться компиляторозависимыми хаками)
тебе нужно будет его передавать явно.
заголовок функции в либке будет выглядеть как то так:
void __stdcall returnNumbers_(int size_a,int size_b,int *a, int *b, int *result);
напишем хелпер для удобного вызова:
template<int A, int B>
void returnNumbers(int (&a)[A],int (&b)[b],int *result)
{
returnNumbers_(A,B,a,b,result);
}
реализация будет какаято-такая:
void __stdcall returnNumbers_(int size_a,int size_b,int *a, int *b, int* result)
{
int count=0;
for(int i=0;i<size_a;i++)
{
for(int j=0;j<size_b;++j)
{
if(a[i]==b[j])
{
count++;
}
}
}
int index=0;
for(int i=0;i<size_a;++i)
{
for(int j=0;j<size_b;++j)
{
if(a[i]==b[j])
{
result[index++]=i;
}
}
}
for(int i=count;i<10;i++)
{
result[i]=-1;
}
}
вызывающая сторона не изменится
это все делалось из условия что размер a равен размеру result. если это не так, то нужно аналогичным образом передать размер еще одного массива.
result можно инициализировать так:
int result[sizeof(a) / sizeof(a[0])]={-1};