Salve, mi sapreste spiegare un momento questo codice?:

codice:
#include <stdio.h>
#include <string.h>
#include <conio.h>

void converge(char *targ, char *src);

int main()
{
  char target[80]= "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

  converge(target, "Prova dell'uso di converge().");
  printf("Stringa finale: %s\n", target);
  getch();
  return 0;
}

void converge(char *targ, char *src)
{
  int i, j;

  printf("%s\n", targ);
  for(i=0, j=strlen(src); i<j; i++, j--) {
     targ[i] = src[i];
     targ[j] = src[j];
     printf("%s\n", targ);
  }
}
In effetti i miei probelmi sorgono quando si parla di procedure...allora, vine dichiarato il prototipo di una procedura, che è il seguente:
codice:
void converge(char *targ, char *src);
dove converge ha come parametri due variabili puntatori a un tipo carattere
Successivamente nel main() viene richiamata la procedura converge(), e nella sua chiamata assistiamo alla presenza di due parametri, cioè target e "Prova dell'suo di converge()." adesso nn capisco una cosa: io ho dichiarato la stringa target[80], poi perchè quando la uso come parametro della procedura, scrivo solo target senza specificarne le dimensioni?
Poi nel corpo della funzione c'è l'istruzione printf("%s\n", targ);
che visualizza il contenuto di target che è una stringa...ma come è possibile? cioè la stringa target è puntata dalla variabile puntatore targ scrivendo in questo modo?
Poi perchè dopo scrive targ[i]=src[i] se nn le abbiamo dichiarate come vettori?