gpt4 book ai didi

c - GCC 中的 void 指针算法是如何发生的

转载 作者:行者123 更新时间:2023-12-04 00:09:06 34 4
gpt4 key购买 nike

int main()  
{
int a;
void *p;
p = &a;
printf("%ld\n",(long)p);
p = p+1;
printf("%ld\n",(long)p);
}

在这个程序中,p+1 只是将 p 的值加 1。我知道 void 指针算术C 中是不可能的>,所以 GCC 是隐式执行的。如果是,那么它是否将其作为 char 指针。另外,为什么 dereferencing 对于 void 指针是不可能的,如果它隐式地进行指针运算。

最佳答案

C 不允许使用 void * 指针类型进行指针运算。

GNU C 允许它通过考虑 void 的大小是 1

来自6.23 void 指针和函数指针的算术:

In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.

http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html

现在回答这个问题:

Also, why dereferencing is not possible for void pointer, if it is implicitly doing pointer arithmetic.

GNU C 允许使用 void * 进行指针运算,但仍然不允许声明 void 类型的对象。

关于c - GCC 中的 void 指针算法是如何发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13113301/

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