我试图通过一个结构来改变一个int变量,该结构常量指向其他结构的指针,其中一个字段就是该变量。 我在编译中收到一个警告和一个错误。任何人都可以解释为什么以及如何使用此代码?
代码是:
typedef struct
{
struct TEEC_Session *ptr_struct;
} Context_model;
typedef struct
{ int t_S;
} Session_model;
void Attribution(Context_model* context,Session_model* session )
{
(*context).ptr_struct = session;
}
void change_t_S(Context_model* context )
{
(*(*context).ptr_struct).t_S = 5; // I Want to change t_S to 5 using only the
context structure
}
main()
{
Context_model context;
Session_model session;
Attribution(&context,&session);
// Now I want to change t_S using the context
change_t_S(&context);
}
答案 0 :(得分:0)
将Context_model的定义修改为
typedef struct
{
Session_model *ptr_struct;
} Context_model;
并将其移至Session_model的定义之下。
struct TEEC_Session未在您的代码中定义。
答案 1 :(得分:0)
您宣布ptr_struct
具有struct TEEC_Session *
类型,但之后尝试将其用作Session_model *
类型的指针。这是明显的类型不匹配。这没有意义。
什么是struct TEEC_Session
?在整个计划中没有提及TEEC_Session
。为什么你将ptr_struct
字段声明为指向某个完全随机的非常类型struct TEEC_Session
的指针,然后完全忘记struct TEEC_Session
的存在?
如果您的struct TEEC_Session
类型应该与Session_model
类型同义,那么您应该告诉编译器。例如,您可以将Session_model
声明为
typedef struct TEEC_Session
{
int t_S;
} Session_model;
一切都会按预期运作。
或者,您可以通过重新排序声明来完全删除对TEEC_Session
的任何引用
typedef struct
{
int t_S;
} Session_model;
typedef struct
{
Session_model *ptr_struct;
} Context_model;
最后,您在代码中使用了C99风格的注释(//
)。 C99不允许在没有显式返回类型的情况下声明函数。 main()
应为int main()
。
答案 2 :(得分:0)
我使用附加声明和解引用成语的指针显示代码。
这在C,HTH编译好。
struct TEEC_Session;
typedef struct
{ struct TEEC_Session *ptr_struct;
} Context_model;
typedef struct TEEC_Session
{ int t_S;
} Session_model;
void Attribution(Context_model* context,Session_model* session )
{
context->ptr_struct = session;
}
void change_t_S(Context_model* context )
{
context->ptr_struct->t_S = 5; // I Want to change t_S to 5 using only the context structure
}
int main_change_var(int argc, char **argv)
{
Context_model context;
Session_model session;
Attribution(&context,&session);
// Now I want to change t_S using the context
change_t_S(&context);
return 0;
}