Похоже, вы хотите сделать сдвиг влево (вращение).
Это довольно простая операция
- Держать указатель на голову
- Для каждого элемента сделайте эту точку на следующем элементе
- поместитеголова на хвосте
Код:
#include <stdio.h>
void rotateLeft( char **arr, int elements )
{
// keep a pointer to the head
char *head = arr[0];
// shift every element left
for (int i=0; i<(elements-1); i++)
{
arr[i] = arr[i+1];
}
// put the head on the tail
arr[elements-1] = head;
}
// EDIT - rotate without [] notation.
void rotateLeftNoArrayNotation( char **arr, int elements )
{
// keep a pointer to the head
char *head = *arr; //arr[0];
// shift every element left
for (int i=0; i<(elements-1); i++)
{
*(arr+i) = *(arr+i+1); //arr[i] = arr[i+1];
}
// put the head on the tail
*(arr+elements-1) = head; //arr[elements-1] = head;
}
int main( void )
{
char *players[3] = { "Player 1", "Player 2", "Player 3" };
for (int i=0; i<3; i++)
printf( "players[%u] = \"%s\"\n", i, players[i] );
rotateLeftNoArrayNotation( players, 3 );
for (int i=0; i<3; i++)
printf( "players[%u] = \"%s\"\n", i, players[i] );
return 0;
}
Что дает:
$ ./rotLeft
players[0] = "Player 1"
players[1] = "Player 2"
players[2] = "Player 3"
players[0] = "Player 2"
players[1] = "Player 3"
players[2] = "Player 1"