Ciao a tutti sto studiando le liste concatenate in vista di un esame e ho alcuni problemi che non riesco a chiarire ;
mi potreste aiutare???

ho riscritto un software che inserisce caratteri in una sequenza , e vi posto alcune parti ;



================================================== ===================

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct listaNodi {
char character;
struct listaNodi *nextPtr;
};
typedef struct listaNodi ListaNodi;
typedef ListaNodi *ListNodePtr;


void inserisci( ListNodePtr *sTesta, char value );
/* definisco un prototipo di funzione per inserire i caratteri */


int main( )
{
ListaNodiPtr Testa = NULL ;
char carattere;
int risposta ;

printf ("vuoi provare ?? digita 1 o 0 per uscire\n" ) ;
scanf ("%d" , & risposta ) ;


while ( risposta == 1 )
{
inserisci( &Testa, carattere );
printf ("vuoi provare ancora ?? digita 1 o 0 per uscire\n" ) ;
scanf ("%d" , & risposta ) ;
}

return 0;


}

void inserisci( ListNodePtr *sTesta, char value )
{
ListaNodiPtr Nuovo;
ListaNodiPtrCorrente;
Nuovo = malloc( sizeof( ListaNodi ) );

if ( Nuovo != NULL ) {
Nuovo->character = value;
Nuovo->nextPtr = NULL;
Precedente = NULL;
Corrente = *sTesta;

while (Corrente != NULL && value >Corrente->character ) {
Precedente =Corrente;
Corrente =Corrente->nextPtr;
}

if ( Precedente == NULL ) {
Nuovo->nextPtr = *sTesta;
*sTesta = Nuovo;
}
else {
Precedente->nextPtr = Nuovo;
Nuovo->nextPtr =Corrente;
}
}
else {
printf( "%c memoria non disponibile .\n", value );
}

}



ho alcune domande ;
1)non ho ho definito nessuna istanza della struttura "ListaNodi" , dove il compilatore trova i dati ?
è un discorso analogo al dichiarare una stringa del tipo char *Ptr = " value" ; ??
cioè da qualche parte nella memoria crea una stringa ?

qualora dichiarassi un puntatore di stringhe del tipo char *xxx [2] = { "vvvv" , "nnn" } ;
come si può accedere ad ogni carattere di ogni singola stringa?

2)Corrente = *sTesta; che senso ha assegnare al puntatore corrente l'indirizzo di quello di testa ?

3) while (Corrente != NULL && value >Corrente->character ) .. ma corrente->character quando è stato inizializzato ?

4) che senso ha un espressione del tipo
*testa =( *Testa ) -> carattere ; perchè le parentesi tonde?



Grazie a tutti