为什么把 星r替换成r就可以正常输出啊,星r和r不都是保存数组最后一个元素吗
# include <stdio.h>
void move(int * p, int m, int n)
{
int * q, *r;
*r = *(p + m - 1);
for (q=p+m-1; q>p; --q)
{
*q = *(q-1);
}
*p = *r;
--n;
if(n>0)
move(p, m, n);
}
int main(void)
{
int m;
printf("您想要输入几个数字,数字个数m=\n");
scanf("%d", &m);
int a[100], i, n;
printf("请输入%d个数字,数字之间用空格隔开\n", m);
for(i=0; i<m; ++i)
scanf("%d", &a[i]);
printf("请输入向后移动的位数n\n");
scanf("%d", &n);
move(a, m, n);
for(i=0; i<m; ++i)
printf("%5d", a[i]);
return 0;
}
int *r; 这定义了一个整形指针变量 r ,且这个指针是个野指针,把数组最后一位的数据保存到 *r 就出错了。int r; 是定义一个整形变量 r 。这么改下,帮助理解:
#include <stdio.h>
void move(int * p, int m, int n)
{
int t, * q, *r = &t; // 修改
*r = *(p + m - 1);
for (q=p+m-1; q>p; --q)
{
*q = *(q-1);
}
*p = *r;
--n;
if(n>0)
move(p, m, n);
}
int main(void)
{
int m;
printf("您想要输入几个数字,数字个数m=\n");
scanf("%d", &m);
int a[100], i, n;
printf("请输入%d个数字,数字之间用空格隔开\n", m);
for(i=0; i<m; ++i)
scanf("%d", &a[i]);
printf("请输入向后移动的位数n\n");
scanf("%d", &n);
move(a, m, n);
for(i=0; i<m; ++i)
printf("%5d", a[i]);
return 0;
}
定义的时候是 intr;再往后r是指针,指向地址,r代表指向该地址的值
学习一下