|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
void reverse(int *x,int n);
void main()
{
int i;
int a[]={3,7,9,11,0,6,7,5,4,2};
printf("原来的顺序:");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
reverse(a,10);
printf("变换后的顺序:");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
}
void reverse(int *x,int n)
{
int m,*i,*j,temp,*p;
i=x;
m=(n-1)/2;
j=x+n-1;
p=m+x;
for(;i<=p;i++,j--)
{
temp=*i;
*i=*j;
*j=temp;
}
}
问题:下面的m=(n-1)/2;
j=x+n-1;
p=m+x;表示什么
本帖最后由 良弓无箭 于 2020-3-27 09:46 编辑
你的这段代码都不能运行。最大的错误是数组不能直接传递,否则便会得到一堆垃圾值。先不说你能不能看懂。你的这段代码本来就有BUG。这是书上的代码?
这是我修改后的代码:
- #include<stdio.h>
- int max,min;
- void max_min_value(int array[],int n);
- int main()
- {
- int i,number[10];
- printf("enter 10 integer numbers:\n");
- for(i=0;i<10;i++)
- {
- scanf("%d",&number[i]);//注意:像代码中那样写根本就无法为数组赋值。
- }
- max_min_value(number,10);
- printf("max=%d,min=%d\n",max,min);
- return 0;
- }
- void max_min_value(int number[],int n)
- {
- int *p,*array_end;
- array_end=number+n;//number是数组的首地址,number+n是数组的最后一个地址。
- max=min=*number;//为max和min赋值。
- for(p=number;p<array_end;p++)//从数组的第一个数的地址开始遍历整个数组。即从首地址移动到最后一个地址。
- {
- if(*p>max)
- {
- max=*p;
- }
- else if (*p<min)
- {
- min=*p;
- }
- }
- }
复制代码
|
|