void inv(int *x, int n)
{ int t,*p,*i,*j,m=(n-1)/2;
i=x; j=x+n-1; p=x+m;
for(;i<=p;i++,j--)
{ t=*i; *i=*j; *j=t; }
}
main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
printf("The array has been reverted:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
程序如上,可是为什么inv中的for循环里for(;i<=p;i++,j--)这样写也可以,不明白!求专家解释!
é¦å ä¸ç¹ è¿ä¸ªç¡®å®æ¯å¯ä»¥ç
é®é¢æ¯ åç太ç»äº 让人ççå«æã
çåå§å¼ã
int t,*p,*i,*j,m=(n-1)/2;
må°±æ¯ä¸ç¹ã
i=x; j=x+n-1; p=x+m;
iæ¯å¼å¤´ jæ¯ç»å°¾ã pæ¯ä¸ç¹
ç¶å
for(;i<=p;i++,j--)
forç¨åå·åéçä¸ä¸ªåã第ä¸ä¸ªç©ºï¼ä¹å°±æ¯ä¸ç¨åå§åå¼ã å 为ä¹åå·²ç»åè¿äº
第äºä¸ª i<=p ä¹å°±æ¯i>p å½åé¢ä¸ä¸ªæé æå°ä¸ç¹åé¢ éåºå¾ªç¯ã
第ä¸ä¸ª æ¹å i++,j--
ä¹å°±æ¯ä¸¤å¤´åã åé¢åå移å¨ï¼åé¢åå移å¨ã è¿æ · å°±å®ç°äºä¸¤ç«¯åä¸é´çä¸ä¸ªéåã
å®ç°äºååºã
å ¶å® æ´ç®åçæ¯
void inv(int *x, int n){ int t,*i,*j;
i=x; j=x+n-1;
for(;i<j;i++,j--)
{ t=*i; *i=*j; *j=t; }
}
è¿æ ·æ´ç´è§ æ´ç®åã
i=x; j=x+n-1;p=x+m;
所以,for(;i<=p;i++,j--)
就相当于:
for(i=x,j=x+n-1;i<=x+(n-1)/2;i++,j--)
总的循环次数为1+(n-1)/2次,每次交换首尾一对数后,i,j相向各自移动一位。所以,这循环就使得x[0]~x[n-1]的元素全部逆置了。