增加 void* 时的垃圾值
此代码:
#include <stdio.h>
int main(void)
{
void *ptr;
int arr[] = {1,2,3,4,5};
ptr = arr;
ptr++;
printf("%d",*(int*)ptr);
}
打印一些垃圾值,但我期望它打印 2
。为什么它不打印2
?
This code:
#include <stdio.h>
int main(void)
{
void *ptr;
int arr[] = {1,2,3,4,5};
ptr = arr;
ptr++;
printf("%d",*(int*)ptr);
}
Prints some garbage value but I was expecting it to print 2
. Why doesn't it print 2
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您无法对 void 指针执行指针算术,因为编译器不知道所指向对象的大小。
您的代码不会在 comeau online 上编译。我猜这是另一个邪恶的 gcc 扩展。
You can't perform pointer arithmetic on a void pointer because the compiler doesn't have any idea about the size of the pointed to objects.
Your code doesn't get compiled on comeau online. Its another evil gcc extension I guess.
某些 C 编译器将 void 指针算术视为 char*。它在 C++ 中无效。
无论如何,您实际上应该只递增非空指针,因为指针算术依赖于数据类型的大小和对齐的知识。
Some C compilers treat void pointer arithmetic as they do char*. It's invalid in C++.
No matter, you really should only be incrementing non void pointers since pointer arithmetic relies on knowledge of the size and alignment of the data type.
在这种情况下尝试
ptr++ 按 int 的大小递增
try
ptr++ increments by size of int in this case