有点看不懂啊~
结果是1711717
如果fun函数本身是想要实现将字符串倒叙输出的话
那是在指针运算部分出错了
我简单说下fun函数的执行流程
首先p作为参数被传入fun函数
程序代码:fun(char * w,int n)
{
char t,*s1,*s2;
s1 = w; /* 此时s1的值是字符串"1234567"的地址 */
s2 = w + n - 1; /* 此时s2的值是字符串"1234567"中'7'的地址 */
while(s1 < s2)
{
t = *s1++;
*s1 = *s2--;
*s2 = t;
/*
函数就是靠这个循环来混淆视线,或者说问题就出在这个循环
首先假设一下p的值为0
第一次循环:
s1 = 0,对应 '1' 地址,s2 = 6, 对应 '7' 地址
t = *s1++; 即 t = *s1; s1++;
执行后 t = '1',s1 = 1, 对应 '2' 地址
*s1 = *s2--;即 *s1 = *s2; s2--;
执行后 '2' 变成 '7',s2 = 5, 对应 '6' 的地址
*s2 = t;
执行后 '6' 变成 '1'
此时字符串为 "1734517"
s1 = 1,s2 = 5 满足循环条件,继续执行循环体
t = *s1 ++;
/t = '7',s1 = 2
*s1 = *s2 --;
/'3' 变成 '1',s2 = 4
*s2 = t;
/'5' 变成 '7’
此时字符串为 "1714717"
s1 = 2,s2 = 4 满足循环条件,继续执行循环体
t = *s1 ++;
/t = '1',s1 = 3
*s1 = *s2 --;
/'4' 变成 '7',s2 = 3
*s2 = t;
/'7' 变成 '1'
此时字符串为 "1711717"
s1 = 3,s2 = 3 不满足循环条件,退出循环体
*/
}
}








