1

我想将指向我的结构的指针传递给一个函数来编辑结构。

这不起作用:

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

}

现在,如果我更改声明指向 this 的指针的部分仍然不起作用。这不起作用:

C_TypeDef x_struct;
C_TypeDef *ptr_struct;
ptr_struct = &x_struct;

但如果我把它改成这个,它确实有效!!

C_TypeDef x_struct;
C_TypeDef *ptr_struct = &x_struct;

我的问题是为什么前两个不起作用?这让我很烦。

4

2 回答 2

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();
}
于 2013-08-13T02:24:44.270 回答
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();

}
于 2013-08-13T07:13:18.957 回答