C语言 自定义函数swap问题

2025-03-21 13:31:43
推荐回答(1个)
回答(1):

首先 这个 答案 是错的 ,
这样写 会直接 segmentation fault 先给你解释下

char *s1="abc"; 编译器会先 把 “abc” 这个 字符串 放到 ”常量区“ (值不能改) ,
在 分配一个 指针 s1 指向 “abc” 的 开头 也就是 ‘a’ 这个 字符 ,
那就是了 swap() 要改 常量区 的 东西 , 所以 会直接 segmentation fault

现在 把 char *s1="abc" 改成 char s1[]="abc"; 或者 假设 那个 内存可读
然后说后面的
刚才讲了 指针 只能 指向一个 地址 也就是 只能指向 一个 ‘点’
所以 s1 其实 是 指向 ‘a’ 这个 字符 *s1 操作的其实 是 ‘a’ 这个 字符
所以 第一个 字符 互相 交换了