Mi sembra molto strano che questo codice non ti dia problemi. Quando tu scriviOriginariamente inviato da gio_gio88
Prima domanda:
... invece se l'archivio viene inizializzato attraverso una scanf come questa
devo, per stamparlo a video, utilizzare &.. come mai?codice:char *data[4]; int i; for (i=0; i<4; ++i) scanf("%s", &data[i]);
codice:printf("L'archivio è composto da:"); for (i=0; i<7; ++i) if (data[i] != NULL) printf(" %s ", &datao[i]); printf("\n");
stai dichiarando un array di 4 puntatori a char, tuttavia non allochi alcuno spazio in memoria per questi puntatori quindi, se nell'immissione dei dati da tastiera vai a sovrascrivere aree di memoria (non precedentemente allocate per le stringhe!) sensibili, è probabile che il programma crashi. Per risolvere o allochi spazio dinamicamente per ciascuna stringa (calloc(), malloc() ecc...) oppure lo fai staticamente, quindi una cosa tipo:codice:char *data[4];
dichiarazione con cui stai dicendo che il tuo array è costituito da 4 stringhe e per ciascuna c'è uno spazio in memoria per 20 caratteri. A questo punto, la lettura può avvenire così:codice:char data[4][20];
e la stampa con lo stesso codice che hai scritto inizialmente, senza la & nella printf().codice:for ( i = 0; i < 4; i++ ) { printf("Scrivere la stringa di indice %d: ", i); scanf("%s", data[i]); /* senza la & */
Non ho capito quale sia il problema... se tu incrementi iPtr con questa istruzioneOriginariamente inviato da gio_gio88
Seconda domanda:
avendo queste istruzioni:
come mai *iPtr punta al secondo elemento di iArr e non al primo visto che ha l'indirizzo base di quest'ultimo?codice:int iArr[15]={2,5,6,8}; int *iPtr; printf("indirizzo di iArr: %X\n",iArr); iPtr = iArr; printf("indirizzo di iArr: %X\n",iPtr); printf("primo elemento di iArr: %d\n",*iArr); printf("secondo elemento di iArr: %d\n",*(iArr+1)); ++iPtr; printf("secondo elemento di iArr: %d\n",*iPtr);
Come bisognerebbe fare per puntare al primo elemento? *(iPtr-1)?
++iPtr;
è normale che questo punti al secondo elemento dell'array...