请问p1=p2与*p1=*p2有什么不同?

hb1125 2001-05-08 12:48:00
p1=p2是使p1指向p2,而*p1=*p2是把p2的值赋予给p1,请问好像没有什么不同?是不是无论如何写都不会使程序发生改变?
...全文
2375 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
BLDai 2001-05-20
  • 打赏
  • 举报
回复
我想说一点,不知道我的理解对否:
如若是一个类的拷贝,用传址的方法可能会有危险,即p1=p2,应该用传值的方法,即*p1=*p2,从这可以看出,p1=p2,也就是说两个变量共享一个地址,而*p1=*p2,就是各自有各自的地址。
在学类的构造函数那里我不太理解,从hb1125的问题里我想到了这个问题,不知道我这样的理解行不行,
John11 2001-05-17
  • 打赏
  • 举报
回复
前面的人讲的太早了。所以我也不说了。
tianying2001 2001-05-17
  • 打赏
  • 举报
回复 1
p1=p2是给一个变量赋值,使得p1原来的值被覆盖.而*p1=*p2是指p1向p2的内容.例如p1=10,p2=20,执行前者p1=20,而后者就不同.
glsolo 2001-05-17
  • 打赏
  • 举报
回复
有些基础东西还是要好好看书的。
BitLover 2001-05-16
  • 打赏
  • 举报
回复
Whoisme 说得很对,再补充一点,执行p1=p2之后,如再执行*p2=5, 你将发现p1的内容也跟着便了,即有*p1=5.而*p1=*p2则不会。
veinstone 2001-05-15
  • 打赏
  • 举报
回复
给分吧,不用我回答吧!
fengzheng 2001-05-15
  • 打赏
  • 举报
回复
whoisme的解释的确很详细,
我都不知怎么回复你了,
基础很重要




lj9852 2001-05-08
  • 打赏
  • 举报
回复 3
应该是你没表达清楚吧:)

p1=p2不是使p1指向p2,而是使p1指向p2所指向的单元。

*p1=*p2不是把p2的值赋予给p1,而是把p2所指向的单元内容赋给p1所指向的单元。
tlovexyj 2001-05-08
  • 打赏
  • 举报
回复
p1=p2
此时p1原来的地址丢失了(无法再得到)
*p1=*p2
不会
BigApple 2001-05-08
  • 打赏
  • 举报
回复
有啊!
看你要干什么,是要改变p1的值还是p1指向的值
Whoisme 2001-05-08
  • 打赏
  • 举报
回复 3
p1=p2指把p2的地址传给p1,覆盖p1原来的值;
*p1=*p2是把p2所指的内容赋给p1所指的内容,与前面的结果不一样。
由于指针本身是有值的,它本身的值就是它所指(即*p1的内容)内存地址,前者是把p1所指的内存地址改变为p2内存地址所指的所覆盖,这样内存是在p1这个地址处改变p1的值;而后者是将p2内存地址所指向的的内容将p1内存地址所指的内容覆盖,这样内存中的操作是在p1所指内容(即*p1处)进行的;在内存堆栈中的意义是不同的,而且通过内存操作来看很明显。
不知道是否明了,才学疏浅,感谢不吝指教,嘿嘿……
sosi 2001-05-08
  • 打赏
  • 举报
回复
p1=p2,按照你的写法就是叫p1等于p2,*p1是一个引用指针,
liu_feng_fly 2001-05-08
  • 打赏
  • 举报
回复
再去看看关于指针的内容吧
kelvinqi 2001-05-08
  • 打赏
  • 举报
回复
p1=p2是使p1指向p2的地址
*p1=*p2是把p2所指向的值付给p1所指向的地址






kukadu8 2001-05-08
  • 打赏
  • 举报
回复
p1=p2的结果是两个指针同指一个地址
*p1=*p2 当然是指两个地址了,但是内容是一样的拉

不知有没有表达清楚

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧