【问题标题】:Is it necessary to typecast the void pointer before assigning it to another pointer type?是否有必要在将 void 指针分配给另一个指针类型之前对其进行类型转换?
【发布时间】:2020-07-30 12:24:24
【问题描述】:
# include <stdio.h>

int main()
{
    float i = 10, *j;
    void *k;
    k = &i;
    j = k;
    printf("%f", *j);
    return 0;
}

上面给出了 GCC 编译器中的输出 10.000000。

我的疑问是,我们应该将表达式j = k 写成j = (float *)k,对吗?

【问题讨论】:

  • 在 C 中,所有指针都可以隐式转换为 和来自 void *。这就是为什么使用像 malloc without casting 这样的函数有效的原因。

标签: c pointers void-pointers


【解决方案1】:

不,这不是必需的。根据C11,第 6.3.2.3 章,

指向void 的指针可以转换为或从指向任何对象类型的指针转​​换。指向的指针 任何对象类型都可以转换为指向void 的指针并再次返回;结果应 比较等于原始指针。

所以,在你的情况下,

k = &i;   // no cast needed
j = k;    // again, no cast needed

功能与

相同
j = &i;

这里不需要显式转换。

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2015-02-14
    • 2016-03-01
    • 1970-01-01
    • 2021-08-22
    • 2018-06-10
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多