Perchè il secondo và, e il primo nò?codice:int * b = {1, 2, 3, 4}; char * p = "ciao";
Non ci sto capendo na mazza, ma non sono tutti e due array?
Cosa fà il compilatore quando si trova davanti ste due istruzioni?
Perchè il secondo và, e il primo nò?codice:int * b = {1, 2, 3, 4}; char * p = "ciao";
Non ci sto capendo na mazza, ma non sono tutti e due array?
Cosa fà il compilatore quando si trova davanti ste due istruzioni?
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
Si ma la stringa, non è un array di caratteri?
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
ma tu la variabile a cui punta b come l'hai dichiarata?Originariamente inviato da Michele Facchin
Si ma la stringa, non è un array di caratteri?
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
up :quipy:
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
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:
In questo caso devi crearti un array di dati int, e poi con un ptr punti all'array.codice:int array[5] = {1, 2, 3, 6, 5}; int *b; b = array; for(int count = 0; count < 5; count++) printf("%d", *b++);
Spero t possa essere stato di aiuto
CIAO
Michelotto .. ehm, hai un po' di problemini concettuali!
No ho capito l'errore, pardon..
Grazie a tutti comunque
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
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:
Che secondo me ti induce a pensare, ragionevolmente, che equivalga a quello sottostante:codice:char* p = "ciao";
E invece non è così. Per una stringa, ciò che viene fatto è questo:codice:char* p = { 'c', 'i', 'a', 'o', '\0' };
- 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 ..
Ok, chiaro
Infatti è propio ocme hai detto tu:
Avevo pensato al inizio che essendo la stringa un vettore di caratteri, {'c','i','a','o','\0'} equivaleva a "ciao".he secondo me ti induce a pensare, ragionevolmente, che equivalga a quello sottostante..
Ma invece adesso ho capito come si comporta il compilatore C in questa situazione:
Grazie mille!codice:char * s = "ciao";
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c