有点看不懂啊~
结果是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 不满足循环条件,退出循环体 */ } }