C语言:子函数同样都是交换,为啥前两种实现了交换,而第三种没实现a,b值的交换?请详细讲一下,谢谢

C语言:子函数同样都是交换,为啥前两种实现了交换,而第三种没实现a,b值的交换?请详细讲一下,谢谢!
(后两种是不是写得有问题啊,是不是指针t没有指向任何变量)

第三种是错误的写法,t是指针,而*x是指针x所指向的变量的值,不是地址,t=*x是错误语句,*y=t也是错误的!追问

那第一种通过交换地址,间接改变了a,b的值,那第二种呢?

和第一种的区别?

都可以么?

追答

第二种是不严谨的,int *x,定义一个int型指针x,但是没有对它进行初始化
建议用第一种

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-11
指针,你要区分到什么是指针指的地址的内存单元 什么是存放指针数值的内存单元数值,和指针内存单元的问题,比如 *t=a; 那么a就是指针 t 指的地址的内存单元,这个单元被你命名为a,而这个内存单元里存放的就是你建的变量a,*t代表的是指针存放的内存单元,t是指针数值。现在看你的程序,第一个对,因为变量赋值变量,第二个也对但是和第一个可以说没有区别,第三个,t=*x 你把变量赋值给了一个指针的内存地址数值,*y=t 也是一样的。t=*x导致的问题就是原来t内存地址数值被改成了*x变量的值。所以最后结果是不对的。再简单点就是内存中是有编号的,假设有指针p 那么*p 就是指p这个指针在内存中的存储单元名字,p就是p指针所存放内存单元的地址数值。
相似回答