C语言中的指针问题,不是很长 求大佬解!
有个让数组中的数倒过来输出的程序:#include"stdio.h"#include"stdlib.h"voidinv(int*x,intn){int*p,temp,*i...
有个让数组中的数倒过来输出的程序:
#include"stdio.h"
#include"stdlib.h"
void inv(int *x,int n)
{
int *p,temp,*i,*j,m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{
temp=*i;*i=*j;*j=temp;
}
return;
}
int main(int argc, const char*argv[])
{
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
printf("\n");
inv(a,10);
printf("The array has benn inverted:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
请重点讲解下这个:i=x;j=x+n-1;p=x+m; 我不是很懂这行代码的含义,求详解!
为什么for循环里面是i<=p; i和p不都是指向数组的吗 展开
#include"stdio.h"
#include"stdlib.h"
void inv(int *x,int n)
{
int *p,temp,*i,*j,m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{
temp=*i;*i=*j;*j=temp;
}
return;
}
int main(int argc, const char*argv[])
{
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("The original array:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
printf("\n");
inv(a,10);
printf("The array has benn inverted:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
请重点讲解下这个:i=x;j=x+n-1;p=x+m; 我不是很懂这行代码的含义,求详解!
为什么for循环里面是i<=p; i和p不都是指向数组的吗 展开
1个回答
展开全部
i和j是x的辅助指针,代替指针x完成一系列动作,
例如传入的是a,实际上就是i = a(数组的首地址),j = a+10-1(数组尾元素地址)
因为是位置颠倒,所以只需要取值数组元素的一半即可,m = (10-1)/2=>4(向下取整),p=a+4(即数组元素a[5]的地址)
看完别望采纳,谢谢!
例如传入的是a,实际上就是i = a(数组的首地址),j = a+10-1(数组尾元素地址)
因为是位置颠倒,所以只需要取值数组元素的一半即可,m = (10-1)/2=>4(向下取整),p=a+4(即数组元素a[5]的地址)
看完别望采纳,谢谢!
追问
但是它那个for循环语句里面的 i<=p 是什么意思 ,你看 i 和 p不是取了 a[0] 和 a[5]的地址吗,那不就意思是 3<0了 ...没懂
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询