gpt4 book ai didi

c - 为什么后缀增量在 void *ptr 上不起作用,但 ptr = ptr + 1 起作用?

转载 作者:行者123 更新时间:2023-11-30 19:58:22 24 4
gpt4 key购买 nike

如果我这样做:

int x = 10;
void *ptr = &x;
ptr++;

“ptr++”行给出错误。

但是,如果我这样做而不是“ptr++”:

ptr = ptr + 1;

它工作得很好。可能是什么原因?

最佳答案

空指针算术在标准 C 中是非法的,但通常被 gcc 扩展允许。

从概念上讲,这是因为当您对指针执行增量时,它实际上会在后台执行缩放以添加适当的字节数(由指针的类型给定),以使您到达下一个数据单元。

由于 void 指针可以指向任何类型,因此它可以避免您以与预期不同的方式访问内存部分。编译器无法确定如何缩放加法,因为它不知道所指向的类型。

在标准 C 中,出于同样的原因,ptr = ptr + 1 也是非法的。您看到一项工作的原因是由于 gcc 扩展存在同样的问题。

当使用 -pedantic-errors 标志时,两者都会在 gcc 中给出错误。

关于c - 为什么后缀增量在 void *ptr 上不起作用,但 ptr = ptr + 1 起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503776/

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