Salve, sto da poco studiando il linguaggio C, avrei delle domande da porvi in modo da comprende il tema in maniera ottimale.

Prima domanda:

Se inizializzo un array di puntatore a carattere in questo modo:

codice:
char *data[4]={"uno","due","tre","quattro"};
quando voglio stamparlo a video posso utilizzare questa procedura, giusto?

codice:
        int i;
	printf("L'archivio è composto da:");
	for (i=0; i<4; ++i)
		if (data[i] != NULL)
			printf(" %s ", data[i]);
	printf("\n");
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");
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)?


Grazie!!