社区
C++ 语言
帖子详情
一个指针问题,不会了。帮忙看看
五号智能
2008-06-26 02:34:06
c++primer第4版
习题4.17
已知指针p1 和 p2 指向同一个数组的元素,下面语句实现什么功能?
p1+=p2-p1;
当p1和p2具有什么值的时候这个语句是非法的? //这句没想明白,试也试过了,没试出什么不合法的地方
...全文
423
22
打赏
收藏
一个指针问题,不会了。帮忙看看
c++primer第4版 习题4.17 已知指针p1 和 p2 指向同一个数组的元素,下面语句实现什么功能? p1+=p2-p1; 当p1和p2具有什么值的时候这个语句是非法的? //这句没想明白,试也试过了,没试出什么不合法的地方
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hurry281
2008-06-28
打赏
举报
回复
p2 < p1 的时候,可能出现负数,这样后p1 += p2 - p1;指向的值,可能益出
zhy282289
2008-06-28
打赏
举报
回复
楼主把题目理解错了~~~!!!!
那个"已知指针p1 和 p2 指向同一个数组的元素" 这个已知是用在第一问的"下面语句实现什么功能? "的.
而那个"当p1和p2具有什么值的时候这个语句是非法的?"已经没用上面那个"已知..."了.
原题就是这个意思了.你多读几遍就应该明白了.
而那个已知指针p1 和 p2 指向同一个数组的元素时:p1+=p2-p1 是一直合法的~!
jinjunweiruan
2008-06-28
打赏
举报
回复
相减是得到一个差值....内存之见的...
cross2
2008-06-28
打赏
举报
回复
[Quote=引用 4 楼 sukyin 的回复:]
此语句使得p1也指向p2原来所指向的元素。原则上说,只要p1和p2的类型相同,则该语句始终是合法的。只有当p1和p2不是同类型指针时,该语句才不合法(不能进行-操作)。
但是,如果p1和p2不是指向同一个数组中的元素,则这个语句的执行结果可能是错误的。因为-操作的结果类型ptrdiff_t只能保证足以存放同一数组中两个指针之间的差距。如果p1和p2不是指向同一个数组中的元素,则-操作的结果有可能超出ptrdiff_t类型的表示范围而…
[/Quote]
貌似是中文版答案的原文解答
matrixdwy
2008-06-28
打赏
举报
回复
大概是P2 - P1是负数,而且加上P1之后变成负数后就非法了吧。毕竟指针只能是非负整数
五号智能
2008-06-28
打赏
举报
回复
这个题,可能是翻译的问题,“同一数组的元素”,为了便于理解,我把“一”字后面加上量词“个”
“同一 个 数组的元素”
可以理解成两种意思
第一种:“同一个”“数组的元素” 这种情况,只要指针指向数组之中,都合法
第二种:“同一个数组的”“元素” 这种情况,当p2小于p1时,在相减过程中,会指向数组外
,但,没有其它操作,也是合法的,然后又相加回来,
就又处于合法状态。
其实,在很多情况下,虽然指向的同一数组,这个表达式也是不合法的。比如void型的指针,
或是指向类私有成员指针。。很多情况。
不知道这个题问的是什么意思。
特别是在问题中它是这样强调:当p1和p2具有什么“值”的时候这个语句是非法的?
这句话,应该这样理解,当p1和p2在某些“值”的时候,是非法的,而在正常的情况下,它是合法的。
这就是问题另人迷惑的所在。因为我没有找到,当这两个指针指向“同一个数组”时,它非法的所在。
除非推翻它问题的描述。两个指针不是指“同一数组”。但,如果不是指向“同一数组”,这个问题
就失去了它提问的根本,变得没有意义。
最后说的话:
如果“无值型(void)”的“无值”,也算一种“值”的话,我想,这就是正确答案
晚上12点结帖,不想为这个无意义的题讨论下去了。
summersdw1
2008-06-27
打赏
举报
回复
这题目原来的意思是想让读者意识到当两个指针指向同一数组时且指针值运算后不会益处的时候将2个指针运算是可以的,
而楼主所说的当p1 p2为和值时表达式不合法,如果P1 P2一直指向同一数组,那么这个表达式永远合法,所以只有当p1 p2指向不同数组时才非法!!!
czx605
2008-06-27
打赏
举报
回复
p1+=p2-p1; //2个指针不能相加,但是指针可以加一个整数偏移整数个原来类型的字节
所以 p2-p1 结果为整数时該式子合法,说的不对纯做见笑
crushor
2008-06-27
打赏
举报
回复
考虑运算顺序?中间的临时结果可能越界?
mzf333
2008-06-27
打赏
举报
回复
应该是指针所代表的边界方围超出数组边界的时候
oxiaoano
2008-06-27
打赏
举报
回复
5楼说的对!
fangbing007
2008-06-26
打赏
举报
回复
呵呵,不好意思,我把题看错了,我以为是指向同一个数组的同一个元素!
p1+=p2-p1;既然在同一个数组中,那么执行这句后,p1还是指向原来的那个值
如果p1,p2不是在同一个数组的话,那么p1与p2相减,根本就无意义!
fangbing007
2008-06-26
打赏
举报
回复
p1+=p2-p1;等同于p1+=0;还是指向原来的那个数组中的数!
除非P1和P2不是指向同一个数组,那样P2-P1根本没意义!
五号智能
2008-06-26
打赏
举报
回复
p1+=p2-p1;
当p1和p2具有什么“值”的时候这个语句是非法的?
这个题还真让人费解啊,不知道哪位大大看过纯英文版的
说说,这个题的本意是什么?
如果以p1+=p2-1 不为"特殊值"时为合法的情况下,,那p1和p2是什么“值”的情况下为不合法的呢
richbirdandy
2008-06-26
打赏
举报
回复
p1+=p2-p1;
p1=p1+p2-p1;
汗 真没看出来什么特别的
长尾巴的悟空
2008-06-26
打赏
举报
回复
同一类型的才是合法的.
五号智能
2008-06-26
打赏
举报
回复
p1+=p2-p1
p1=p1+(p2-p1)
不要混淆+=概念
五号智能
2008-06-26
打赏
举报
回复
p1+=p2-p1
p1=p1+(p2-p1)
不要混淆+=概念
sukyin
2008-06-26
打赏
举报
回复
此语句使得p1也指向p2原来所指向的元素。原则上说,只要p1和p2的类型相同,则该语句始终是合法的。只有当p1和p2不是同类型指针时,该语句才不合法(不能进行-操作)。
但是,如果p1和p2不是指向同一个数组中的元素,则这个语句的执行结果可能是错误的。因为-操作的结果类型ptrdiff_t只能保证足以存放同一数组中两个指针之间的差距。如果p1和p2不是指向同一个数组中的元素,则-操作的结果有可能超出ptrdiff_t类型的表示范围而产生溢出,从而该语句的执行结果不能保证p1指向p2原来所指向的元素(甚至不能保证p1为有效指针)。
yyyapple
2008-06-26
打赏
举报
回复
1. p1, p2指向同一个元素;
2. 估计p1+p2溢出了的时候
加载更多回复(2)
一篇文章让你彻底搞懂c语言
指针
以及变量声明的
问题
对
指针
懵逼的就来
看看
吧
c语言整型变为字符
指针
,关于强制类型转换以及将整数转换为
指针
的有关
问题
...
C语言»关于强制类型转换以及将整数转换为
指针
的有关
问题
关于强制类型转换以及将整数转换为
指针
的有关
问题
www.myexceptions.net网友分享于:2013-02-29浏览:89次关于强制类型转换以及将整数转换为
指针
的
问题
最近看c...
指针
内存和地址(
指针
一)
定义
一个
指针
变量//ptr的类型是int * ,*是在说明ptr是
指针
变量,ptr指向的对象是int类型这个ptr就叫做
指针
变量,用来存放
指针
的变量就叫做
指针
变量。通俗一点理解:存放在
指针
变量中的值都会被认为是地址。int * 写...
C++进阶:智能
指针
weak_ptr只做链接功能,因为weak_ptr与shared_ptr不是
一个
类型的智能
指针
,weak_ptr想要从shared_ptr获取资源只有两个方式,一是被声明为友元,二是为shared_ptr添加get接口,get接口必须使用const修饰this
指针
。...
【C语言进阶】④
指针
归纳总结,这些
指针
你都认识吗?
看一段代码,想一想打印的结果是什么?3.7.输出的是两个地址,这两个地址是 test 函数的地址 为什么呢?3.8
指针
函数和函数
指针
总结四、感谢与预告 一、
指针
的概念
指针
就是
一个
变量,只不过这个变量比较特别,是...
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章