才开始学习c语言,字符串与指针方面不懂!

来源:百度知道 编辑:UC知道 时间:2024/07/16 14:46:19
下列程序输出结果???请各位帮忙解答,谢谢!

main()
{
char *s1="abc",*s2="def";
swap(s1,s2);
puts(s1);
puts(s2);

}
swap(char *s1,char *s2)
{
char *t;
t=s1;s1=s2;s2=t;

}

swap(char *s1,char *s2)
{
char *t;
t=s1;s1=s2;s2=t;

}
2:30考马哲了,冒着挂科的危险来回答你,这个函数有问题。应该用strcpy(t, st), strcpy(s1, s2), strcpy(s2, t)才能达到交换的目的。而且在main前面应该加上函数的声明void swap(char *s1, char *s2);如果你用int 类型,那么你应该返回一个值。
再说说一个致命错误,在main中,你用的是char *s1 = "abc",这样的变量存储在静态区,用strcpy改变是错误的,会引起程序崩溃,所以你要用字符数组去存储。别忘了加上#include <string.h>

最后,你上面程序的结果不是你想象的那样,结果是
abc
def

另外,我负责的告诉你,像这种方法:*t=*p1;*p1=*p2;*p2=*t; 是达不到你的效果的,因为*t,*p1,*p2都是首地址的内容,也就是第一个字符,所以这样做只能改变第一个字符,也就是最终是dbc,aef,不信你试一试。不过要避免程序崩溃,你必须在main里面改变一下:char *s1="abc";char *s2="bcd";这样做后,你试图改变s1和s2都是错误的,不能对它们改变,我已经说过了。

你程序的输出:
abc
def
但这个结果并不是你想要的结果,应该使用二级指针,程序如下:
#include <stdio.h>
#include <stdlib.h>

void swap(char **ps1,char **ps2)
{
char *pt;
pt=*ps1;
*ps1=*ps2;
*ps2=pt;

return;
}

int main()
{
char *