C 程序的

来源:百度知道 编辑:UC知道 时间:2024/06/08 05:05:31
#include
#include
fun(char*w,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2);
{t=*s1++;
*s1=*s2--;
*s2=t;
}
}
main()
{charp〔〕="1234567";
fun(p,strlen(p));
puts(p);
}
程序运行后的输出结果是()
A)1234567
B)7654321
C)1711717
D)71771

答案是C 各位大哥大姐 请解释下

首先更正一下,你的程序应该是:(此程序在VS2005下亲测)
#include <stdio.h>
#include <stdlib.h>

void fun(char*w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
main()
{
char p[]="1234567";
fun(p,strlen(p));
puts(p);
}

其实原理是这样的:第一次循环,s1的指针指在1的位置上,s2的指针指在7的位置上。然后,*s1的值赋给了t,即t=1。s1的地址向后移一位,即指在了2的位置上。之后s2的值赋给了s1的值,即*s1=7。此时数组变为:1734567。然后s2的地址向前移了一位,指在了6的位置上。结果被之前的t所取代。第一次循环后的结果为:1734517。后面的几次循环,原理相同。其实就是把1和7来回换位置赋值,直到s1的地址比s2的地址大为止。所以最终结果是:1711717。

这们朋友,定义p时前面是不是有个*号?