C 指向函数、结构作为参数的指针
今天再次重打 在结构中是指向函数的指针,在这个函数中,我希望能够处理来自这个结构的数据,所以指向结构的指针作为参数给出 这个问题的演示C 指向函数、结构作为参数的指针,c,parameters,struct,type-conversion,function-pointers,C,Parameters,Struct,Type Conversion,Function Pointers,今天再次重打 在结构中是指向函数的指针,在这个函数中,我希望能够处理来自这个结构的数据,所以指向结构的指针作为参数给出 这个问题的演示 #include <stdio.h> #include <stdlib.h> struct tMYSTRUCTURE; typedef struct{ int myint; void (* pCallback)(struct tMYSTRUCTURE *mystructure); }tMYSTRUCTURE; vo
#include <stdio.h>
#include <stdlib.h>
struct tMYSTRUCTURE;
typedef struct{
int myint;
void (* pCallback)(struct tMYSTRUCTURE *mystructure);
}tMYSTRUCTURE;
void hello(struct tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}
int main(void) {
tMYSTRUCTURE mystruct;
mystruct.pCallback = hello;
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}
#包括
#包括
结构t系统结构;
类型定义结构{
int-myint;
void(*pCallback)(结构tmysttructure*mystructure);
}t系统结构;
void hello(struct tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
但我得到了警告
..\src\retyping.c:31:5:警告:正在传递的参数1
来自不兼容指针类型的“mystruct.pCallback”
..\src\retyping.c:31:5:注意:应为“struct tmysttructure*”,但
参数的类型为“struct tmysttructure*”
应为“struct tMYSTRUCTURE*”,但为“struct tMYSTRUCTURE*”,很有趣
知道如何修复吗?更正代码:
#include <stdio.h>
#include <stdlib.h>
struct tMYSTRUCTURE_;
typedef struct tMYSTRUCTURE_ {
int myint;
void (* pCallback)(struct tMYSTRUCTURE_ *mystructure);
} tMYSTRUCTURE;
void hello(tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}
int main(void) {
tMYSTRUCTURE mystruct;
mystruct.pCallback = hello;
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}
#包括
#包括
结构t系统结构;
typedef结构t系统结构{
int-myint;
void(*pCallback)(结构tmysttructure_*mystructure);
}t系统结构;
void hello(tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
请注意struct
名称和typedef
名称之间的差异。是的,你可以让他们一样,但许多人(包括我自己)觉得困惑。。。通常的做法是将它们区分开来
无可否认,GCC在这里的诊断有点奇怪。这个问题是由
typedef
对结构进行加密,然后使用struct
关键字和typedef
'd名称引起的。向前声明struct
和typedef
修复了问题
#include <stdio.h>
#include <stdlib.h>
struct tagMYSTRUCTURE;
typedef struct tagMYSTRUCTURE tMYSTRUCTURE;
struct tagMYSTRUCTURE {
int myint;
void (* pCallback)(tMYSTRUCTURE *mystructure);
};
void hello(tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}
int main(void) {
tMYSTRUCTURE mystruct;
mystruct.pCallback = hello;
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}
#包括
#包括
结构tagMYSTRUCTURE;
typedef struct tagMYSTRUCTURE t系统结构;
结构tagMYSTRUCTURE{
int-myint;
无效(*pCallback)(tSystemstructure*mystructure);
};
void hello(tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
在您的代码中,没有struct tmysttructure
,它是一个不完整的类型。您所拥有的只是一个匿名结构,它也恰好被定义为tmysttructure
。看见