Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429

    [C] Variante del ciclo for

    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?

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Perchè appunto quando dichiari un vettore, ti riferisci ad esso come un puntatore.

  3. #3
    Originariamente inviato da iguana13
    Perchè appunto quando dichiari un vettore, ti riferisci ad esso come un puntatore.
    si come puntatore a quell'area di memoria

    Pero' cmq puoi passare un array ad una funzione,indifferentemente, cosi':
    codice:
    void esempio(int vet[]){
    //...
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  4. #4

    Re: [C] Variante del ciclo for

    Ma che c'azzecca il ciclo for?

    Originariamente inviato da Iena87

    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?
    Mi sa che fai bene a leggerti il classico capitoletto sulle stringhe che trovi in qualsiasi manuale C...

    le stringhe sono vettori di char..e fin qui dovremmo esserci.
    Nel prototipo della funzione per segnalare che un parametro è una stringa puoi usare sia la notazione "char* stringa" che "char stringa[]"... non c'è la dimensione perchè non avrebbe senso.. le funzioni devono essere genercihe.. mica puoi farti una funzione per le stringhe da 10 caratteri.. una per quelle da 11.. etc etc...
    le stringhe in C sono "NULL terminated".. quindi non importa quanto siano lunghe (se lo spazio necessario è allocato)... si riconosce la fine di una stringa dal carattere "\0"

    Riguardo printf("%s\n", targ)... targ è il nome di un vettore e perciò (aritmetica dei puntatori) non è altro che un puntatore al primo elemento del vettore... nella stringa di formato usi "%s" che dice al compilatore ch quello che riceve è una stringa.. ricevuto il puntatore la staperà finchè non trova "\0"

    targ[i] non è altro che il puntatore alla i-esima posizion del vettore... quindi all'i-esimo carattere... come ti ho dettoprima le notazioni "char* str" e "char str[]" sono intercambiabili.. quindi...

    se "str" è la stringa "ciao":

    str <-- punta a "c"
    str[0] <-- punta a "c"

    str[2] <-- punta ad "a"
    str+2 <-- punta ad "a" perchè str punta a "c" e alla sua posizione viene sommato "2" [non somma proprio 2.. ma 2*la dimensione del tipo] e quindi viene trovato "c"



  5. #5
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.