gpt4 book ai didi

C 指针算术

转载 作者:行者123 更新时间:2023-11-30 16:43:36 24 4
gpt4 key购买 nike

鉴于此代码:

int *p, *q;

p = (int *) 1000;
q = (int *) 2000;

什么是q - p以及如何实现?

最佳答案

根据标准,它实际上是未定义的。指针算术不能保证有效,除非指针都指向同一个数组中的元素,或者指向同一个数组之外的元素。

该标准的相关部分是 6.5.6:9(c1x 的 n1362 草案,但自 c99 以来没有改变),其中规定:

When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements.

如果您的 int 数据类型是 4 个字节,您很可能会得到 250,但不能保证。未定义的行为(与实现定义的行为不同)意味着未定义。任何事情都有可能发生,甚至包括大部分时空的彻底毁灭。

进修类(class):

  • 定义的行为是标准强制执行的行为。实现必须做到这一点才能保持一致。
  • 实现定义的行为由实现决定,但必须清楚地记录该行为。如果您不太关心可移植性,请使用此选项。
  • 未定义的行为意味着任何事情都可能发生。永远不要这样做!

关于C 指针算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45109554/

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