Il seguente codice è un algoritmo che, dati due array allocati dinamicamente ne crea a sua volta un'altro che contiene solo e soltanto gli elementi in comune dei due vettori precedenti.
#include <stdio.h>
#include <stdlib.h>
void intersezioneArray (int *v, int m, int *w, int n, int **x, int *o);
int main ()
{
int *A;
int *B;
int *c, l;
int i, dA, dB;
//Numero elementi per A
printf("Quanti elementi per A?\n");
scanf("%d", &dA);
//Allocazione dinamica di A con malloc
A = malloc(dA*sizeof(int));
//Caricamento elementi array A
for(i = 0; i < dA; i++)
{
printf("A[%d] = ", i);
scanf("%d", &A[i]);
}
//Numero di elementi per B
printf("Quanti elementi per B?\n");
scanf("%d", &dB);
//Allocazione dinamica di B con malloc
B = malloc(dB*sizeof(int));
//Caricamento elementi array B
for(i = 0; i < dB; i++)
{
printf("B[%d] = ", i);
scanf("%d", &B[i]);
}
intersezioneArray (A, dA, B, dB, &c, &l);
printf ("Array intersezione:\n");
for (i=0; i<l; i++)
printf ("%d ", c[i]);
printf ("\n");
free (c);
return 0;
}
void intersezioneArray (int *v, int m, int *w, int n, int **x, int *o)
{
int *aux, *aux2;
int elCom=0, i, j;
if (m>n)
aux = (int *)malloc (m*sizeof (int));
else
aux = (int *)malloc (n*sizeof (int));
for (i=0; i<m; i++)
for (j=0; j<n; j++)
if (v[i]==w[j])
{
aux[elCom]=v[i];
elCom++;
}
if (elCom==0)
{
*x=NULL;
*o=0;
return;
}
aux2=(int *)malloc (elCom*sizeof (int));
for (i=0; i<elCom; i++)
aux2[i]=aux[i];
*x=aux2;
*o=elCom;
free (aux);
}
A, B e c sono tre array, i primi due sono quelli in ingresso e l'ultimo, c, è il vettore che contiene gli elementi in comune.
Vengono dichiarati tutti e tre come puntatori, ok.
Ma perché alla chiamata di funzione "intersezioneArray (A, dA, B, dB, &c, &l);" viene passato l'indirizzo di c e non anche quelli di A e B?
Poi, "void intersezioneArray (int *v, int m, int *w, int n, int **x, int *o)", il parametro formale di c, **x, perché è un puntatore a puntatore?
Mi aiutereste a fare chiarezza? Grazie.