Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    [C] Vettori e puntatori

    Ciao, sto studiando il C da pochi giorni e sono arrivato appunto ai puntatori, ma ho incontrato non poche difficoltà!
    Innanzi tutto vi dico che il libro è un po' vecchiotto, quindi non vorrei che gli errori fossero dovuti a comandi ormai obsoleti: Linguaggio C, Kernighan-Ritchie stampato nel lontano '89
    Il problema è questo. Il libro dice che i puntatori possono essere trattati come variabili, perciò essere incrementati col comando ++. A me però dà errore il seguente codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    main ()
    {
    	
    	char daytab[2][3]= {
    				{10, 20, 30},
    				{40, 50, 60}
    	    		};
    	
    	printf("%d\n", *++daytab[1]);
    }
    In più se dichiaro daytab[][] {...}; mi dà sempre errore, dicendomi che non ne ho dato le dimensioni... ma non dovrebbe prenderle da solo???
    Ultima cosa: così come è dichiarato sopra daytab, ho un array di puntatori in cui l'array daytab ha 3 elementi che puntano a 2 char o ne ha 2 che puntano a 3 char?
    Grazie

    ps: cosa è il cast?

  2. #2
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    1) Scrivendo daytab[1] indichi l'indirizzo dell'elemento che sta a daytab[1][0]. Per indicare un valore contenuto (non un puntatore) devi sempre indicare un indice per ogni dimensione della matrice.

    2) Se vuoi incrementare il valore di daytab[1][0] devi scrivere ++daytab[1][0].

    3) Anche imparando l'operatore ++, mai dimenticare " + 1", che è indispensabile se non si vuole incrementare qualcosa!
    Ad esempio non puoi scrivere "a = 3++", perchè 3 è un valore costante e non una variabile. Dovresti scrivere "a = 3 + 1".
    Lo stesso vale per l'indirizzo daytab[1], che non è una variabile, come ti ho spiegato prima, ma è un valore costante che punta a daytab[1][0].
    I've got a bike. You can ride it if you like.

  3. #3

    Re: [C] Vettori e puntatori

    Originariamente inviato da Alcott
    Innanzi tutto vi dico che il libro è un po' vecchiotto, quindi non vorrei che gli errori fossero dovuti a comandi ormai obsoleti: Linguaggio C, Kernighan-Ritchie stampato nel lontano '89
    QUEL libro, non solo e' il migliore
    ma e' anche scritto dagli inventori
    di c e unix

    inoltre
    printf("%d\n", *++daytab[1]);
    penso faccia confusione con le precedenze degli operatori..
    *++daytab[1] penso volevi fare
    ++(*daytab[1]) che equivale a ++(*(daytab+1))

  4. #4
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Con il comando *++daytab[1], carcavo di far stampare un elemento di daytab. *daytab[0] mi stampa 10 mentre *daytab[1] mi stampa 40. Ora, secondo quanto dice il libro (e che usa svariate volte, vedi per es. a pag 149), *++daytab[0] mi dovrebbe stampare 20 e *++daytab[1] mi dovrebbe stampare 50.
    Il fatto invece è che a me compilando il file mi dà il seguente errore:
    codice:
    /home/andrea/esercizi_libro/labso/src/labso.c:35: error: wrong type argument to increment

  5. #5
    *(++daytab[1])
    cosi' dovrebbe funzionare..

  6. #6
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Hai dichiarato una matrice a due dimensioni e, almeno con il mio compilatore (gcc), daytab[1] restituisce l'indirizzo dell'inizio del secondo elemento ([1], non [0]) della prima dimensione, cioè &daytab[1][0].

    Non so voi.

    Fate una prova e ditemi cosa stampa...
    I've got a bike. You can ride it if you like.

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.