我想将一个指向我的struct的指针传递给一个编辑结构的函数。
这不起作用:
typedef struct{
unsigned char x;
unsigned char y;
float z;
}C_TypeDef;
C_TypeDef *ptr_struct; //This is the part that I change to get it to work.
void print_TypeDef(C_TypeDef *report, unsigned char x_data)
{
report->x = x_data;
printf("x is equal to %d", report->x);
}
int main(void)
{
print_TypeDef(ptr_struct,0x23);
getchar();
}
现在,如果我更改我声明指向此部分的部分仍然不起作用。 这不起作用:
C_TypeDef x_struct;
C_TypeDef *ptr_struct;
ptr_struct = &x_struct;
但如果我把它更改为此,它确实有用!!
C_TypeDef x_struct;
C_TypeDef *ptr_struct = &x_struct;
我的问题是为什么前两个不工作?这让我烦恼。
答案 0 :(得分:2)
第一个版本的问题是,你没有为ptr_struct
指向的内存分配内存,它通常会导致分段错误。这在以下方面得到修复:
C_TypeDef x_struct;
C_TypeDef *ptr_struct = &x_struct;
这就是第三个版本有效的原因。那么第二个版本有什么问题?因为你不能在任何函数之外分配一个全局变量,你可以像在第三个版本中那样初始化它们,或者你应该在某个函数中分配它,比如main
:
C_TypeDef x_struct;
C_TypeDef *ptr_struct;
//omit other parts
int main(void)
{
ptr_struct = &x_struct; //Here assign the pointer a value
print_TypeDef(ptr_struct,0x23);
getchar();
}
答案 1 :(得分:0)
第一个版本的代码无效,因为您已经为结构创建了一个指针类型,并没有真正分配任何地址。但试图在调用函数中访问它
print_TypeDef(ptr_struct,0x23);\\here ptr_struct is not pointing to any instance of the structure.
第二个版本无效,因为语句
C_TypeDef x_struct;
C_TypeDef *ptr_struct;
是完全正确的,但下一个为变量赋值的说法根本不可能在任何函数之外。
C_TypeDef x_struct;\\correct, creating a instance of struct type
C_TypeDef *ptr_struct;\\correct, creating a pointer to an structure
ptr_struct = &x_struct;\\wrong, as this statement is possible only inside a function.
顺便提一下,为了使你的代码能够工作,你不需要创建结构实例和该实例的指针,而是通过
来完成它。C_TypeDef x_struct;
在main中,调用这个函数,
int main(void)
{
print_TypeDef(&x_struct,0x23);
getchar();
}