小丸子hjm 发表于 2018-10-17 09:46:48

100个经典C语言里面例题68

/****************
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
*****************/

#include<stdio.h>
#if(0)
int main()
{
        int i,k,m;
        int a={1,2,3,4,5,6};
        printf ("后移:");
        scanf ("%d",&m);
        for (i=0;i<3;i++)
        {
                k=a;a=a;a=k;
        }
        for (i=0;i<6;i++)
        {
                printf("%d",a);
        }
}
#endif

#if(1)
int main()
{
int number={1,2,3,4,5,6},n,m,i;
printf("the total numbers is:");
scanf("%d",&n);
printf("back m:");
scanf("%d",&m);
//for(i=0;i<n-1;i++)
//scanf("%d,",&number);
//scanf("%d",&number);
move(number,n,m);
for(i=0;i<n-1;i++)
printf("%d,",number);
printf("%d",number);
}

int move(array,n,m)
int n,m,array; //全局变量? 为什么只有在这里定义是可行的?
{
int *p,array_end;
array_end=*(array+n-1);   
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;            
m--;
if(m>0) move(array,n,m);   
}
#endif




注释部分不明白,我的理解是全局变量,但是尝试放到别的位置,都不可行,

有没有知道的,帮忙解释一下,感谢!

ba21 发表于 2018-10-17 10:06:52

这是一种特殊的写法,第一次见。
不是全局变量,实际上就是
int move(int array, int n, int m)
等于
int move(array,n,m)
int n,m,array; //全局变量? 为什么只有在这里定义是可行的?

它分开来写了。

小丸子hjm 发表于 2018-10-17 10:14:07

ba21 发表于 2018-10-17 10:06
这是一种特殊的写法,第一次见。
不是全局变量,实际上就是
int move(int array, int n, int m)


嗷嗷,我明白了,难怪我怎么改都不对,谢谢{:5_106:}
页: [1]
查看完整版本: 100个经典C语言里面例题68