首先 这个 答案 是错的 ,
这样写 会直接 segmentation fault 先给你解释下
char *s1="abc"; 编译器会先 把 “abc” 这个 字符串 放到 ”常量区“ (值不能改) ,
在 分配一个 指针 s1 指向 “abc” 的 开头 也就是 ‘a’ 这个 字符 ,
那就是了 swap() 要改 常量区 的 东西 , 所以 会直接 segmentation fault
现在 把 char *s1="abc" 改成 char s1[]="abc"; 或者 假设 那个 内存可读
然后说后面的
刚才讲了 指针 只能 指向一个 地址 也就是 只能指向 一个 ‘点’
所以 s1 其实 是 指向 ‘a’ 这个 字符 *s1 操作的其实 是 ‘a’ 这个 字符
所以 第一个 字符 互相 交换了