C 指针参数之前的结构类型做什么?

C 指针参数之前的结构类型做什么?,c,types,struct,libuv,C,Types,Struct,Libuv,我想知道以下语法的作用: func((some_type*) apointer) 这是一个简单的类型检查还是做更多的事情? 为什么类型周围需要括号 整个示例来自: 问候,, 博多 更新: 这行吗 typedef struct one_t { int counter; } one_t; typedef struct two_t { another_t request; } two_t; (one_t*) two_t 它被称为或类型转换。当您想将一种类型的数据转换为另一种类

我想知道以下语法的作用:

func((some_type*) apointer)
这是一个简单的类型检查还是做更多的事情? 为什么类型周围需要括号

整个示例来自:

问候,, 博多

更新:

这行吗

typedef struct one_t
{
    int counter;

} one_t;

typedef struct two_t
{
    another_t request;
} two_t;

(one_t*) two_t
它被称为或类型转换。当您想将一种类型的数据转换为另一种类型的数据时,可以使用该方法。

它被称为或类型转换。当您希望将一种类型的数据转换为另一种类型的数据时,可以使用该选项

(some_type) *apointer
这意味着您将
apointer
内容强制转换为
some\u类型
类型

(uv_stream_t*)&server
这意味着您将
apointer
内容强制转换为
some\u类型
类型

(uv_stream_t*)&server
他是演员。它在这里用作C中的多态性仿真

uv_tcp_t的声明如下:

typedef struct uv_tcp_t
{
    uv_stream_t base; //base has to be first member for byte reinterpretation to work

    /*...snip...*/

} uv_tcp_t;
这允许
uv\u-listen
在uv\u-tcp\t上操作,就像它是一个uv\u-stream\t变量一样

这是常见的,而且(AFAIK)完全有效

他是演员。它在这里用作C中的多态性仿真

uv_tcp_t的声明如下:

typedef struct uv_tcp_t
{
    uv_stream_t base; //base has to be first member for byte reinterpretation to work

    /*...snip...*/

} uv_tcp_t;
这允许
uv\u-listen
在uv\u-tcp\t上操作,就像它是一个uv\u-stream\t变量一样


这是常见的,并且(AFAIK)完全有效的C。

我理解整数、浮点的类型转换,但我不理解结构的类型转换。服务器(&server)的引用是否映射到uv_stream_t*的值?这是否要求uv_tcp_t具有与uv_stream_t相同的属性?我仍然不明白结构的强制转换遵循哪些规则,我在开始时添加了一个示例post@kyogron此类型转换不用于结构,而是用于指针。通过强制转换,我们告诉编译器“将此处地址处的这些字节视为另一种类型”。这意味着它在大多数情况下都是极其不安全的,但在这一种情况下就不是了。这里的字节重新解释是有效的,因为
base
是uv\u tcp\t的第一个成员。@kyogron您可以有多个相关的类型,并使用相同的函数以相同的方式对每个类型进行操作。我理解整型、浮点型的类型转换,但不理解结构型的类型转换。服务器(&server)的引用是否映射到uv_stream_t*的值?这是否要求uv_tcp_t具有与uv_stream_t相同的属性?我仍然不明白结构的强制转换遵循哪些规则,我在开始时添加了一个示例post@kyogron此类型转换不用于结构,而是用于指针。通过强制转换,我们告诉编译器“将此处地址处的这些字节视为另一种类型”。这意味着它在大多数情况下都是极其不安全的,但在这一种情况下就不是了。字节重新解释在这里起作用,因为
base
是uv\u tcp\t的第一个成员。@kyogron您可以有多个相关的类型,并使用相同的函数以相同的方式对每个类型进行操作。类型转换遵循哪些规则?类型转换遵循哪些规则?