gpt4 book ai didi

c - + 零索引的地址,然后在某些情况下或总是在 C 中取消引用、未定义行为?

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

C 中是否存在以下未定义行为?如果是这样,为什么它是未定义的行为?它是在所有标准中都没有定义,还是只有一些标准没有定义?

int test(char *p)
{
int i = 0;
char *p2;

p2 = *(&p + i);
}

在 GCC 中,p2 似乎与预期的一样,因为 i 为 0。

我知道执行此语句确实没有任何意义,但我仍然觉得它很有趣。

需要说明的是,我并不是在寻找关于什么是未定义行为的一般性答案。我认为有几篇关于该主题的不错的教程和论文,例如http://pdos.csail.mit.edu/papers/ub:apsys12.pdfhttp://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html

最佳答案

行为定义明确。您正在获取指针的地址。当 i = 0 时,您不会修改地址。但如果 i 为 1,您会将指针的地址增加总线宽度 4 或 8 个字节。如果 p 来自一个指针数组,那也没问题。否则,如果您尝试从 p2 读取,就会崩溃。

关于c - + 零索引的地址,然后在某些情况下或总是在 C 中取消引用、未定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26558999/

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