社区
C语言
帖子详情
请问p1=p2与*p1=*p2有什么不同?
hb1125
2001-05-08 12:48:00
p1=p2是使p1指向p2,而*p1=*p2是把p2的值赋予给p1,请问好像没有什么不同?是不是无论如何写都不会使程序发生改变?
...全文
2375
15
打赏
收藏
请问p1=p2与*p1=*p2有什么不同?
p1=p2是使p1指向p2,而*p1=*p2是把p2的值赋予给p1,请问好像没有什么不同?是不是无论如何写都不会使程序发生改变?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 当然是指两个地址了,但是内容是一样的拉
不知有没有表达清楚
C语言中的*
p1
++=*
p2
++
例:把一个数组的内容复制给另一个数组 #define SIZE 50 int x[SIZE]; int y[SIZE]; int *
p1
, *
p2
; void try2() { for(
p1
=x,
p2
=y;
p1
-x<SIZE; ) *
p1
++=*
p2
++; } *
p1
++ 后缀++ 操作符的优先级高于*操作符,即*
p1
++ = *(
p1
++) 故执行顺序为:
p1
++ ...
程序改错题
一、下面程序有什么错误: swap(int *
p1
,int *
p2
) { int *p; *p=*
p1
; *
p1
=*
p2
; *
p2
=*p; } //这里p是一个野指针,应改为: void swap(int *
p1
,int *
p2
) { int p; p=*
p1
; *
p1
=*
p2
; *
p2
=p; }//可以实现函数外部*
p1
*
p2
的交换 void s
swap( int*
p1
,int*
p2
)找错
下面的一段程序有什么错误: swap( int*
p1
,int*
p2
) { int *p; *p = *
p1
; *
p1
= *
p2
; *
p2
= *p; } 在 swap 函数中,p 是一个“野”指针,有可能指向系统区, 导致程序运行的崩溃。在 VC++中 DEBUG 运行时提示错误“Access Violation”。该程序应该改为: swap( int*
p1
,i
编程语言专题《开发篇,交换*
p1
和*
p2
的值中常犯错误》
大家都懂:“交换两个值应该使用地址传参”!! 这本是没有什么好说的!!请看下面: void swap(int *
p1
,int *
p2
) { int *temp; *temp=*
p1
; *
p1
=*
p2
; *
p2
=*temp; } 写到这里,很多人就一副自我感觉良好的样子(我就是一个):我使用了地址传参啊!我也使用了中间变量啊! 事实以上程序是错误的!
关于char p,*
p1
,**
p2
char p是声明bai一个字符类型变量dup,char *
p1
是声明一个字符类型zhi的指针变量dao
p1
,那么zhuanchar **
p2
就相当与给char类型的指针变量再声明一个指针.(2级指针) 举个例子,假如: char p='a';//假设声明了p后,p在内存的1000处,则&p=1000(&为取变量首地址) char *
p1
=&p;//则
p1
=1000,*
p1
=p='a',
p1
就和p关联了;假设
p1
被放在2000处 char **
p2
=&
p1
;//则
p2
C语言
70,014
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章