malloc 中是否需要类型转换?

发布于 2024-10-17 11:19:37 字数 76 浏览 3 评论 0原文

malloc 中类型转换有什么用?如果我不在 malloc 中编写类型转换,那么它会返回什么? (为什么 malloc 中需要类型转换?)

What is the use of typecast in malloc? If I don't write the typecast in malloc then what will it return? (Why is typecasting required in malloc?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(5

挽手叙旧 2024-10-24 11:19:37

我假设你的意思是这样的:

int *iptr = (int*)malloc(/* Something */);

在 C 中,你不必(也不应该)强制转换返回指针来自malloc。它是一个 void *,在 C 中,它被隐式转换为另一种指针类型。

int *iptr = malloc(/* Something */);

是首选形式。

这不适用于 C++,它不共享相同的 void * 隐式转换行为。

I assume you mean something like this:

int *iptr = (int*)malloc(/* something */);

And in C, you do not have to (and should not) cast the return pointer from malloc. It's a void * and in C, it is implicitly converted to another pointer type.

int *iptr = malloc(/* something */);

Is the preferred form.

This does not apply to C++, which does not share the same void * implicit cast behavior.

染墨丶若流云 2024-10-24 11:19:37

在 C 语言中,您永远不应该强制转换 malloc() 的返回值。这样做是:

  • 不必要的,因为 void * 与任何其他指针类型兼容(函数指针除外,但这并不适用于此)。
  • 潜在危险,因为它可能隐藏错误(缺少函数声明)。
  • 混乱,强制转换很长并且通常难以阅读,因此它只会使代码变得更难看。

所以:没有任何好处,至少有三个缺点,因此应该避免。

You should never cast the return value of malloc(), in C. Doing so is:

  • Unnecessary, since void * is compatible with any other pointer type (except function pointers, but that doesn't apply here).
  • Potentially dangerous, since it can hide an error (missing declaration of the function).
  • Cluttering, casts are long and often hard to read, so it just makes the code uglier.

So: there are no benefits, at least three drawbacks, and thus it should be avoided.

动次打次papapa 2024-10-24 11:19:37

您不需要强制转换 malloc 的返回值。 C 常见问题解答中对此进行了进一步讨论:http://c-faq.com/malloc/cast。 htmlhttp://c-faq.com/malloc/mallocnocast.html。

You're not required to cast the return value of malloc. This is discussed further in the C FAQ: http://c-faq.com/malloc/cast.html and http://c-faq.com/malloc/mallocnocast.html .

心头的小情儿 2024-10-24 11:19:37

仅仅因为 malloc 返回一个 void* 并且由于 void* 尚未定义大小,因此您无法对其应用指针算数。因此,您通常将指针转换为分配的内存块实际指向的数据类型。

Just because malloc returns a void* and since void* has not defined size you can't apply pointer aritmetic on it. So you generally cast the pointer to the data type your allocated memory block actually points.

月依秋水 2024-10-24 11:19:37

答案是正确的,我只是有一个建议:

  • 不要使用指针 - malloc() 返回的太多 - 尽快将它们转换为指定的类型;
  • 如果您需要对它们进行一些数学运算,请将它们转换为 char*,因此 ptr++ 将意味着您所除外的内容:向其添加 1(将添加数据类型的大小,对于 char 为 1) )。

The answers are correct, I just have an advice:

  • don't play with pointers - which malloc() returns - too much, cast them to a specified type asap;
  • if you need to do some math with them, cast them to char*, so ptr++ will mean what you except: add 1 to it (the size of the datatype will be added, which is 1 for char).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文