要达到的目的是输入n = 5, a = {1,2,3,4,5},m = 3时能输出 4 5 1 2 3
可在对指针所指的值赋值时出错,是语法问题吗?代码见下:
/移位m个整数/
#include <stdio.h>
#include <stdlib.h>
int* a = 0, *a1 = 0;
int* move(int* a,int n,int m);
int main()
{
int n;
printf("Please input the size: ");
scanf("%d",&n);
//为数组动态分配大小
if (!(a = (int* )calloc(n,sizeof(int))))
{
printf("Fail to allocate memory!!!\n");
exit(1);
}
printf("Please input %d numbers: ",n);
for (int i = 0; i < n; i++)
scanf("%d",a + i);
int m;
printf("Please input m: ");
scanf("%d",&m);
a1 = move(a,n,m);
//输出新排列
for (int j = 0; j < n; j++)
printf("%6d",a1 + j);
system("pause");
return 0;
}
int* move(int* a, int n,int m)
{
for (int i = m; i < n; i++)
{
*(a1 + i -m) = *(a + i); // 编译时这里内存报错,但不知为什么错,怎么改
}
for (int j = 0; j < m; j++)
{
*(a1 + n + j) = *(a + j);
}
return a1;
}
你的程序还有其他错误:
printf("%6d",a1 + j);//应该:printf("%6d",*(a1 + j));
申请的空间没有释放
你的这个编程算法也比较麻烦,如果仅仅是实现输出,只要控制下标就可以了。例如:
//输出新排列
for (int j = m; j < n; j++)
printf("%6d",a[j]);
for (int j = 0; j < m; j++)
printf("%6d",a[j]);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。