增加 void* 时的垃圾值

发布于 2024-11-10 02:54:36 字数 237 浏览 3 评论 0原文

此代码:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奶茶白久 2024-11-17 02:54:36

您无法对 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.

挖个坑埋了你 2024-11-17 02:54:36

某些 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.

彼岸花ソ最美的依靠 2024-11-17 02:54:36

在这种情况下尝试

int *ptr

ptr++ 按 int 的大小递增

try

int *ptr

ptr++ increments by size of int in this case

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文