Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C] - Puntatori

  1. #1

    [C] - Puntatori

    codice:
     int * b = {1, 2, 3, 4};
    
     char * p = "ciao";
    Perchè il secondo và, e il primo nò?
    Non ci sto capendo na mazza, ma non sono tutti e due array?

    Cosa fà il compilatore quando si trova davanti ste due istruzioni?

  2. #2
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    per come leggo il secondo lo vedo stringa

  3. #3
    Si ma la stringa, non è un array di caratteri?

  4. #4
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da Michele Facchin
    Si ma la stringa, non è un array di caratteri?
    ma tu la variabile a cui punta b come l'hai dichiarata?

    poi non ricordo bene visto che non è il mio cmapo il C, però con i puntatori non dovevi avere una variabile inizializzata a cui puntare? forse il problema sta a monte

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    173
    Con i puntatori gli int non sono paragonabili ai char, quindi non vanno usati allo stesso modo.
    Puoi risolvere il tuo prob. in questo modo:
    codice:
            int array[5] = {1, 2, 3, 6, 5};
    
            int *b;
    
            b = array;
    
            for(int count = 0; count < 5; count++)
                printf("%d", *b++);
    In questo caso devi crearti un array di dati int, e poi con un ptr punti all'array.

    Spero t possa essere stato di aiuto
    CIAO

  7. #7
    Michelotto .. ehm, hai un po' di problemini concettuali!

  8. #8
    No ho capito l'errore, pardon..

    Grazie a tutti comunque

  9. #9
    Ti bastano le definizioni canoniche di puntatore e di array per capirlo, e suppongo ti siano note. Questo almeno per il primo.

    Per il secondo il discorso è diverso. Avviene una cosa non molto trasparente in questo codice:

    codice:
    char* p = "ciao";
    Che secondo me ti induce a pensare, ragionevolmente, che equivalga a quello sottostante:

    codice:
    char* p = { 'c', 'i', 'a', 'o', '\0' };
    E invece non è così. Per una stringa, ciò che viene fatto è questo:

    - Nel segmento dati vengono inizializzate delle zone di memoria atte a contenere le stringhe dichiarate esplicitamente, cioè come sopra;

    - Il puntatore viene fatto puntare a quella zona di memoria, che inoltre è solitamente in sola lettura, pena il crash del programma (provare per credere).

    Una nota intuitiva. Se ci fai caso, quando apri un eseguibile con un qualsiasi editor di testo, ti sarà capitato sicuramente di trovare le stringhe che nel codice del programma hai inserito in modo esplicito, cioè fra "". Questo perché tali stringhe sono parte effettiva del programma stesso, in quanto memorizzate nel segmento dati.

    Forse il discorso ti ha chiarito un po' le idee ..

  10. #10
    Ok, chiaro
    Infatti è propio ocme hai detto tu:
    he secondo me ti induce a pensare, ragionevolmente, che equivalga a quello sottostante..
    Avevo pensato al inizio che essendo la stringa un vettore di caratteri, {'c','i','a','o','\0'} equivaleva a "ciao".

    Ma invece adesso ho capito come si comporta il compilatore C in questa situazione:
    codice:
    char * s = "ciao";
    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.