- 废话少说,首先看两个例子:
- Ps1:
![](https://img2020.cnblogs.com/i-beta/1724763/202003/1724763-20200315214325765-1075217173.png)
结果:
![](https://img2020.cnblogs.com/i-beta/1724763/202003/1724763-20200315214033890-1956425562.png)
- Ps2
- 解析
上下两个main()内容一致,为什么结果不同,主要是fun()内部的差别,首先要明白所谓指针不过也是变量而已,跟int、long等变量一样,只不过他的值为地址罢了,没有什么神秘的,第一个fun(q)是把q的值赋给另一个指针p,j就像两个int变量a,b,a=b一样。此时p指向的内容就是q指向的内容,即为1。然后p被重新赋值p的值发生变化,那他指向的地址就变了啊,这时p指向的内容为22。而q指向不变,因为q并未发生变化,就像a,b一样,b如何变跟a没关系。所以q指向的内容仍为1,并不变。下面那个例子变化是因为fun()中并不是p的值发生了变化p并没有被重新赋值 ,而是“ *p “”这个整体发生了变化,*p即为p指向的内容,也就是说是p所指向的地址里的内容变了,所以结果为22.
- 总结
简单来说就是:第一个是有俩变量p和q,刚开始他们指向一致,指向的内容始终没变,后来p变了但不关q的事,输出的是*p,结果自然不变;第二个是从始至终他俩指向都没变,但是他们指向的内容发生了变化,结果自然变了。
ps:你要是还没明白,我在做个比喻。有两根绳子,一根黄色,一根红色,还有一根香蕉,一个苹果。例一就是开始红绳、黄绳都拴着苹果,后来黄绳不栓苹果了,去栓香蕉了,结果问你红绳栓啥,自然是苹果,并没变。例二就是开始红绳、黄绳都栓着苹果,后来小明把苹果换成了香蕉,问你,红绳栓的是啥,自然都是是香蕉。