Suppose I have an array
unsigned char arr[]= {0,1,2,3,4,5,6,7,8,9};
Is there a way to perform shift operation on them besides just copying them
As long as the array is modifiable, you can use memmove to shift them (but don't mistakenly use memcpy as memcpy is not meant for overlapping regions):
memmove(&arr[0], &arr[1], sizeof(arr) - sizeof(*arr));
(sizeof(arr) - sizeof(*arr) is the size in bytes of all but 1 element of the array).