通过指针对字符数组中字符进行倒序

img
如图,为何在第二个for循环可以实现倒序,而一出那个循环最后那个printf就不行了

你第一个for循环已经是把s倒着存进tmp了
你第二个for循环又把tmp倒着存进ptr里面了,ptr又变回了s,只不过你是倒序访问的ptr,所以第二遍打印也是倒序,但实际上ptr已经变回s了
所以第三次打印ptr就是打印s,是正序

因为你第一个for循环中,给tmp赋值的时候,tmp已经是倒序了,在第二个for循环中,又倒序一次(相当于有返回去了),两次倒序相当于没做改变,所以输出的还是原来的值。

第2个for里的j是逐渐减小的,也就是给ptr从后往前赋值,k是从1开始增大。所以这个for是把tmp倒序赋值给了ptr
而输出用的是ptr+j,这个输出是ptr从字符串后面往前输出的,其实ptr的内容已经是a-f了。

第1个for里的i和第2个for里的k都是从1开始,也就是说tmp的[0]是未知的,尽量避免这种情况。