gpt4 book ai didi

c++ - 对于指针 p,在极端情况下 p < p+1 可能为假吗?

转载 作者:IT老高 更新时间:2023-10-28 13:58:14 31 4
gpt4 key购买 nike

对于指针变量 pp<(p+1) 是否可能为假?请解释你的答案。如果是,在什么情况下会发生这种情况?

我想知道 p+1 是否会溢出并等于 0。

例如在带有 GCC-4.8 的 64 位 PC 上用于 C 语言程序:

int main(void) {
void *p=(void *)0xFFFFFFFFFFFFFFFF;

printf("p :%p\n", p);
printf("p+1 :%p\n", p+1);
printf("Result :%d\n", p<p+1);
}

返回:

p      : 0xffffffffffffffff
p+1 : (nil)
Result : 0

所以我相信这种情况是可能的。对于无效的指针位置,它可能会发生。这是我能想到的唯一解决方案。还有其他人吗?

注意:不做任何假设。考虑任何有可能发生或不发生这种情况的编译器/平台/架构/操作系统。

最佳答案

Is it possible, for a pointer variable p, that p<(p+1) is false?

如果 p指向正确类型的有效对象(即根据 C++ 对象模型创建的对象),则否。 p+1将指向该对象之后的内存位置,并且总是比较大于p .

否则,算术和比较的行为都未定义,因此结果可能是真、假或泛黄。

If yes, under which circumstances can this happen?

它可能会发生,也可能不会发生

p = reinterpret_cast<char*>(numeric_limits<uintptr_t>::max);

如果指针运算像无符号整数运算一样工作,那么这可能会导致数字溢出,例如 p+1值为零,比较小于 p .或者它可能会做其他事情。

关于c++ - 对于指针 p,在极端情况下 p < p+1 可能为假吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272992/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com