An ugly C example, enjoy it:
#include <stdio.h>
void* f(void * p, size_t blockSize, size_t wholeSize){
    int i;
    unsigned char *begin, *end, temp;
    begin = (unsigned char*) p;
    end = (unsigned char*) p + wholeSize - blockSize;
    while(end>begin){
        for(i=0; i<blockSize; i++){
            temp = begin[i];
            begin[i] = end[i];
            end[i] = temp;
        }
        begin += blockSize;
        end -= blockSize;
    }
    return p;
}
int main()
{
    int i;
    double da[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int ia[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    char ca[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    f(da, sizeof(da[0]), sizeof(da));
    f(ia, sizeof(ia[0]), sizeof(ia));
    f(ca, sizeof(ca[0]), sizeof(ca));
    for(i=0; i<10; i++){
        printf("da[%d]=%lf ia[%d]=%d ca[%d]=%d\n", i, da[i], i, ia[i], i, (int)ca[i]);
    }
    return 0;
}