指针
#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);
}
reverse(a,10);
printf("变换后的顺序:");
for(i=0;i<10;i++)
{
printf("%d",a);
}
}
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;表示什么 这个x是为什么要加上? 如果不明白的话在追问我。
#include<stdio.h>
void reverse(int *x,int n);
void main(void)
{
int i;
int a[]={3,7,9,11,0,6,7,5,4,2};
printf("原来的顺序:");
for(i=0;i<10;i++)
{
printf("%d ",a);
}
reverse(a,10);
putchar('\n');
printf("变换后的顺序:");
for(i=0;i<10;i++)
{
printf("%d ",a);
}
}
void reverse(int *x,int n)
{
int m,*i,*j,temp,*p;
i=x;
m=(n-1)/2;//定位中间的元素。
j=x+n-1;//这里指向x数组中的最后一个元素。
p=m+x;//这里指向x数组中的中间的元素。
for(;i<=p;i++,j--)//条件的意思是如果想要反转数组只需要前后数组中第一个数和最后一个数,第二个数和倒数第二个数交换即可。
{
temp=*i;
*i=*j;
*j=temp;
}
}
学习一下,四处看看!! 良弓无箭 发表于 2020-3-26 17:13
如果不明白的话在追问我。
追问一下 void reverse(int array[],int n)
{
int *array_end,*p;
array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++)
{
if(*p>max)
max=*p;
else if(*p<min)
min=*p;
那这里的 max=min=*array 和for里面的东西表示的是什么
kukiJJY 发表于 2020-3-26 17:41
追问一下 void reverse(int array[],int n)
{
int *array_end,*p;
这段代码的目的是啥?反转还是排序?你要说明白。另外max和min也没有定义。 良弓无箭 发表于 2020-3-26 19:13
这段代码的目的是啥?反转还是排序?你要说明白。另外max和min也没有定义。
#include<stdio.h>
int max,min;
void max_min_value(int array[],int n);
void main()
{
int i,number;
printf("enter10 integer numbers:\n");
for(i=0;i<10;i++)
{
scanf("%d",&number);
}
max_min_value(number,10);
printf("\n max=%d,min=%d\n",max,min);
}
void max_min_value(int array[],int n)
{
int *p,*array_end;
array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++)
{
if(*p>max)
{
max=*p;
}
else if (*p<min)
{
min=*p;
}
}
}
这是完整的代码,我想知道array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++)
这部分各自什么意思 ,看了一下午没看懂 array_end = array + n 意思是将array_end指向array这个数组最后一个元素的地址,目的是为了下面的for循环可以循环n-1次
max = min = * array;意思是对max和min这两个变量赋值使得他们等于array这个数组的首个元素
for(p=array+1;p<array_end;p++)意思是 p等于array这个数组第二个元素的地址;如果p小于array_end的地址;就会执行循环;p地址就会加一。 因为array是个数组,它里面的元素的地址是连续的
本帖最后由 良弓无箭 于 2020-3-27 09:46 编辑
kukiJJY 发表于 2020-3-26 23:35
#include
int max,min;
你的这段代码都不能运行。最大的错误是数组不能直接传递,否则便会得到一堆垃圾值。先不说你能不能看懂。你的这段代码本来就有BUG。这是书上的代码?
这是我修改后的代码:
#include<stdio.h>
int max,min;
void max_min_value(int array[],int n);
int main()
{
int i,number;
printf("enter 10 integer numbers:\n");
for(i=0;i<10;i++)
{
scanf("%d",&number);//注意:像代码中那样写根本就无法为数组赋值。
}
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;
}
}
} {:10_254:}数值传递那里打少了我要知道的大体是懂了多谢
页:
[1]