[英]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.