楼主这题问的好。
这一题,个人观点:
字符串数组 与
字符串指针 它们两引用的概念你没搞清楚。
1.按你用缺省字符数组来引用"yes"和"no"字符串是可行的。
问题:这里的main函数中的p1,p2为什么不能改成指针*p1,*p2呢?
解决:因为当p1,p2作为字符串指针来引用的时候,.
错误1. 子函数copy形参不能用指针来承接指针变量地址.,我们知道,只有指向指针的指针,才能引用.所以这里应该使用 **s1,**s2来充当形参变量.
错误2. 你要了解,字符数组是可以取内容和改变内容的,而字符串指针它只是指向数组的指针懂吗!它仅仅只是指向这串字符串的首地址!,
所以在这个子函数中,你可以直接改变交换的指针指向,具体思路,如下代码:
#include "stdio.h"
void copy(char **s1,char **s2)
{
//用一级指针来承接,因为这里如果再用指向指针的指针来引用,会导致值重复,就好比:指针间接改变变量值的关系一样。
char *sp;
sp=*s1;
*s1=*s2;
*s2=sp;
}
main()
{
char *p1="Yes",*p2="No";
copy(&p1,&p2);
printf("p1=%s\np2=%s\n ",p1,p2);
}