gpt4 book ai didi

c - 哪一个是错误的?

转载 作者:行者123 更新时间:2023-11-30 20:07:30 25 4
gpt4 key购买 nike

#include <stdio.h>
typedef struct {int a; int b; int c;} F;
typedef struct{
int a;
int (*ptr)(F*);
} A;

int set_a(F * obj){
obj->a = 1;
}
int main(){
F a;
A b;
b.a = 0;
b.ptr = set_a;
b.ptr(&a);
printf("%d",a.a);

getchar();
}

这似乎是正确的

但是为什么

#include <stdio.h>
typedef struct{
int a;
int (*ptr)(A*);
} A;

int set_a(A * obj){
obj->a = 1;
}
int main(){
A a;
a.a = 0;
a.ptr = set_a;
a.ptr(&a);
printf("%d",a.a);

getchar();
}

这是错误的吗?和

#include <stdio.h>
typedef struct{
int a;
int (*ptr)(A);
} A;

int set_a(A * obj){
obj->a = 1;
}
int main(){
A a;
a.a = 0;
a.ptr = set_a;
a.ptr(&a);
printf("%d",a.a);

getchar();
}

这是正确的吗?我真的很想知道谢谢

Windows 7 上 Visual Studio 2012 上的环境语言 C

最佳答案

在第二个和第三个示例中,您在声明之前(期间)引用了 A:

typedef struct{
int a;
int (*ptr)(A*); // < the compiler doesn't know A at this point.
} A;

此外,在第三个示例中,您将 ptr 声明为接收 A 的函数,但随后使用接收 A* 的 set_a 对其进行赋值,这也是无效的。

您需要先声明它:

struct A;
typedef struct A{
int a;
int (*ptr)(struct A*);
} A;

在第一个示例中,您引用的 F 已经存在,因此没问题。

关于c - 哪一个是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com