我正在寻找答案,是否在C语言中,以下示例函数的强制类型转换和调用是有效的(如果无效,请提供类似行为的示例)。
示例:
#include <stdio.h>
#include <stdint.h>
typedef struct {
uint32_t a;
} parent_t;
typedef struct {
parent_t parent;
uint32_t b;
} child_t;
typedef void (*funct_ptr_t)(parent_t* pParent, uint32_t x);
void test_function(child_t* pChild, uint32_t x);
int main()
{
funct_ptr_t func = (funct_ptr_t)test_function;
funct(NULL, 0U);
return 0;
}
void test_function(child_t* pChild, uint32_t x) {
// do something
}
@EDIT 由于上述方法无效,我想询问第二种方法。
typedef void (*funct_ptr_t)(void* pChild, uint32_t x);
void test_function(child_t* pChild, uint32_t x);
int main()
{
funct_ptr_t func = (funct_ptr_t)test_function;
child_t child;
func(&child, 0U);
return 0;
}
void test_function(child_t* pChild, uint32_t x) {
// do something
}
child_t
对象的指针,但可能会收到一个指向 "only"parent_t
的指针。如果函数尝试访问b
成员,则肯定会引发未定义行为。 - UnholySheepparent
前缀之外的内容。 - Barmar