你的程序的确有问题的,改过的参考(只要改函数部分)void move(int *p, int m, int n){ int i, j, temp, *t = p; //数组头不能改,所以要加一指针 for (i = 0; i < n % m; i++) { t = p; //每次重新指向头 temp = *t; for (t++, j = 0; j < m - 1; t++, j++) //最后一个不能取后面的了,所以要-1 *(t - 1) = *t; *(t - 1) = temp; //最后一个在t-1 }}