gpt4 book ai didi

c - 递减 NULL 指针会导致未定义的行为吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:31 28 4
gpt4 key购买 nike

在我的机器上递减一个 NULL 指针仍然得到一个 NULL 指针,我想知道这是否定义明确。

char *p = NULL;
--p;

最佳答案

是的,行为未定义。

--p 等同于 p = p - 1(除了 p 只计算一次,这在这种情况)。

N1570 6.5.6 第 8 段,讨论加法运算符,说:

When an expression that has integer type is added to or subtracted from a pointer, the result has the type of the pointer operand. If the pointer operand points to an element of an array object, and the array is large enough, the result points to an element offset from the original element such that the difference of the subscripts of the resulting and original array elements equals the integer expression.
[...]
If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

由于您的指针值 p 不指向数组对象的元素或数组对象最后一个元素之后的元素,因此 p - 1 的行为未定义。

(顺便说一句,如果您的代码导致 p 成为空指针,我会感到惊讶——尽管由于行为未定义,语言当然允许它。我可以想象一个优化编译器忽略--p; 因为它知道它的行为是未定义的,但我自己还没有看到。你怎么知道 p 是空的?)

关于c - 递减 NULL 指针会导致未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697210/

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