Basta "giocare" con gli indici, non è difficile.
In questo esempio inverto delle stringhe, ma puoi fare la stessa cosa con qualsiasi tipo di dati:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*==============================================================================
Copia la stringa di lunghezza l puntata da orig nello spazio di memoria puntato
da dest, invertendo l'ordine dei caratteri.
==============================================================================*/
int aipoc( char *dest, const char *orig, size_t l ) {
if( orig && dest ) { /* controlla i parametri */
size_t i;
for( i=0; i<l; ++i ) dest[l-i-1] = orig[i];
return 1; /* 1: bene */
}
return 0; /* 0: errore */
}
/*==============================================================================
Inverte l'ordine dei caratteri nell'ambito della stringa di lunghezza l
contenuta nello spazio di memoria puntato da s.
==============================================================================*/
int itrevni( char *s, size_t l ) {
if( s ) { /* controlla il parametro */
size_t i;
char aux;
for( i=0; i<l/2; ++i ) {
aux = s[i];
s[i] = s[l-i-1];
s[l-i-1] = aux;
}
return 1; /* 1: bene */
}
return 0; /* 0: errore */
}
/*==============================================================================
Programma d'esempio che usa aipoc() e itrevni().
==============================================================================*/
int main() {
char s1[32] = "l'inferno sono gli altri";
char s2[32] = "";
size_t l = strlen( s1 );
/* mostra le due stringhe nella loro versione originale */
printf( "\n%s", "s1 e s2 originali" );
printf( "\nstringa 1: \"%s\"", s1 );
printf( "\nstringa 2: \"%s\"\n", s2 );
/* copia s1 in s2, invertendone l'ordine dei caratteri */
aipoc( s2, s1, l );
/* mostra le due stringhe */
printf( "\n%s", "applicazione aipoc( s2, s1 )" );
printf( "\nstringa 1: \"%s\"", s1 );
printf( "\nstringa 2: \"%s\"\n", s2 );
/* inverte "in place" l'ordine dei caratteri in s1 e s2 */
itrevni( s1, l );
itrevni( s2, l );
/* mostra le due stringhe */
printf( "\n%s", "applicazione itrevni( s1 ) e itrevni( s2 )" );
printf( "\nstringa 1: \"%s\"", s1 );
printf( "\nstringa 2: \"%s\"\n", s2 );
getchar();
return 0;
}