C语言指针输出

来源:百度知道 编辑:UC知道 时间:2024/07/07 08:14:39
这个的输出结果为one two
void fun(char *x,char *y)
{ char *t;
t=x;x=y;y=t;
}
main()
{ char *p="one",*q="two";
fun(p,q);
printf("%s,%s\n",p,q);
}
而这个的输出结果为1bc a23
void fun(char *x,char *y)
{ char t;
t=*x;*x=*y;*y=t;
}
main()
{ char *p="abc",*q="123";
fun(p,q);
printf("%s,%s\n",p,q);
}
为什么都是指针引用 有的交换了元素有的没有交换呢????
请高手们详细解释下 不胜感激!!!!!
那第二个为什么交换了呢
怎样实现两个指针的交换呢?
那要怎么样才能实现one two 的交换呢

其实很简单,因为函数参数都是值传递,看下面两行分析:

t=x;x=y;y=t; // 操作指针,值不交换

t=*x;*x=*y;*y=t; // 操作指针指向的对象,值交换

第一个函数在调用的时候 把main()中的两个指向字符串的地址复制到形参里面,你交换了形参的两个地址,并没有对地址指向的元素交换。这样在子函数结束的时候,因为你只是把复制的两个地址交换了,而真正main()中的 p、q 是没有变的,所以跟没调子函数一样

而第二个是对地址指向的元素操作,不一样的

你虽然用了指针,但是你的指针并不是引用,出来函数,还是没有交换。

楼上说的对
调用函数 时 形参的变化 对实参 室没有影响的 第一个只是交换了参数
第二个 交换的是 数据

老谭的书上不是有写吗。C语言都是单向“值传递”的。