void move(int* p, int n, int m) { int* first_p; int* last_p; // 指向原数组头部的指针 first_p = p; // 指向原数组尾部的指针 last_p = first_p + n - 1; // 先做整体移动,从数组尾部开始处理,一个一个向后移动 while (last_p >= first_p) { *(last_p + m) = *last_p; // 每移动完一个数字,原数组尾部指针向原数组头部方向移动一下,直到指向头部 last_p--; } // 然后让前面m位等于后面m位 while (first_p < (p + m)) { *first_p++ = *(first_p + n); }
}