下面的 pointer_to_structure.c 中的代码正常,但 pointer_to_type-def.c 中的代码没有,我不明白错误。
我会感谢任何纠正代码的人。
pointer_to_structure.c
#include <stdio.h>
struct sum {
int a,b,c;
} sum_operation,*ptr;
int main(){
ptr = &sum_operation;
(*ptr).a = 1;
(*ptr).b = 3;
(*ptr).c =(*ptr).b + (*ptr).a ;
printf("%d\n",(*ptr).c);
return 0;
}
pointer_to_type-def.c
#include <stdio.h>
typedef struct sum {
int a,b,c;
}sum_operation,*ptr;
int main(){
ptr = &sum_operation; //this should be changed
(*ptr).a = 1;
(*ptr).b = 3;
(*ptr).c =(*ptr).b + (*ptr).a ;
printf("%d\n",(*ptr).c);
return 0;
}
答案 0 :(得分:1)
这应该有效
#include <stdio.h>
typedef struct sum {
int a,b,c;
} mytype;
int main(){
mytype sum_operation;
mytype *ptr;
ptr = &sum_operation; //this should be changed
(*ptr).a = 1;
(*ptr).b = 3;
(*ptr).c =(*ptr).b + (*ptr).a ;
printf("%d\n",(*ptr).c);
return 0;
}
提示:使用typedef时,它会为该结构创建一个类型别名。因此sum_operation是代码中的一种结构。在固定代码中,使用typedef为结构赋予别名“mystruct”,并使用该别名类型创建对象,然后通常对其进行操作。
另外,您的评论不正确。如果只改变那个单一的陈述,代码就无法运作。
答案 1 :(得分:0)
使用时
typedef struct sum {
int a,b,c;
}sum_operation,*ptr;
相当于声明
struct sum {
int a,b,c;
};
typedef struct sum sum_operation;
因此,sum_operation
现在成为typedef
。因此,您不能使用指针来获取sum_operation
的地址,因为它只是一种类型。你需要使用
sum_operation another;
sum_operation *ptr;
然后你可以做
ptr = &another;