Originariamente inviato da gio_gio88
Prima domanda:

... invece se l'archivio viene inizializzato attraverso una scanf come questa

codice:
        char *data[4];
	int i;
	
	for (i=0; i<4; ++i)
	scanf("%s", &data[i]);
devo, per stamparlo a video, utilizzare &.. come mai?

codice:
	printf("L'archivio è composto da:");
	for (i=0; i<7; ++i)
		if (data[i] != NULL)
			printf(" %s ", &datao[i]);
	printf("\n");
Mi sembra molto strano che questo codice non ti dia problemi. Quando tu scrivi

codice:
char *data[4];
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][20];
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:
for ( i = 0; i < 4; i++ ) {
   printf("Scrivere la stringa di indice %d: ", i);
   scanf("%s", data[i]); /* senza la & */
e la stampa con lo stesso codice che hai scritto inizialmente, senza la & nella printf().

Originariamente inviato da gio_gio88
Seconda domanda:

avendo queste istruzioni:

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 mai *iPtr punta al secondo elemento di iArr e non al primo visto che ha l'indirizzo base di quest'ultimo?
Come bisognerebbe fare per puntare al primo elemento? *(iPtr-1)?
Non ho capito quale sia il problema... se tu incrementi iPtr con questa istruzione

++iPtr;

è normale che questo punti al secondo elemento dell'array...