Typedef结构指针

时间:2013-08-13 02:11:12

标签: c pointers struct typedef

我想将一个指向我的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;

我的问题是为什么前两个不工作?这让我烦恼。

2 个答案:

答案 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();

}