簡體   English   中英

Typedef結構指針

[英]Typedef struct pointers

我想將指向我的結構的指針傳遞給函數以編輯該結構。

這不起作用:

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;

我的問題是為什么前兩個不起作用? 這使我煩惱。

第一個版本的問題是,您沒有為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();
}

代碼的第一個版本不起作用,因為您已經創建了指向該結構的指針類型,並且沒有真正分配任何地址。 但是嘗試在調用函數中訪問它

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;

總的來說,這樣調用函數

int main(void)
{

    print_TypeDef(&x_struct,0x23);
    getchar();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM