该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用动态内存分配写的..
可是得不到想要的答案...- -完全不明白哪里错了.无报错和警告.代码如下:
#include
#include
void
move(int *a,int n,int m)
{
int *p = a;
int *array_m;
array_m = malloc(m * sizeof(int));
if (array_m == NULL)
{
printf("Can't get memory for that many values.\n");
exit(EXIT_FAILURE);
}
for (p = p + n - m; p < p + n; p++) //把后面的取出放到array_m中
*array_m++ = *p;
for (p = a; p < p + m; p++) //前面的后移
*(p + m) = *p;
for (p = p + m; p >= a;p--) //把array_m中的放到前面
*p = *--array_m; //因为前面array_m指针已经指向最后那个内存之后.所以得先--.
free(array_m); //释放内存
}
int
main()
{
int *array;
int n,i,m;
printf("请输入整数的个数:\n");
if (scanf("%d",&n) != 1 || n <= 0)
{
printf("Illegal number of values.\n");
exit(EXIT_FAILURE);
}
array = malloc(n * sizeof(int));
if (array == NULL)
{
printf("Can't get memory for that many values.\n");
exit(EXIT_FAILURE);
}
printf("请输入%d个整数:\n",n);
for (i = 0; i < n; i++)
{
if (scanf("%d",array + 1) != 1)
{
printf("Error reading value #%d\n",i);
free(array);
exit(EXIT_FAILURE);
}
}
printf("请输入准备移动的整数个数:\n");
while (scanf("%d",&m) != 1 || m <= 0)
{
printf("Illegal number of values.\n");
}
move(array,n,m);
for (i = 0; i < n; i++)
{
printf("%d\n",*(array + i));
}
free(array);
return EXIT_SUCCESS;
}