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

}

ここで、これへのポインターを宣言する部分を変更しても、まだ機能しません。これは動作しません:

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

しかし、これに変更すると、うまくいきます!!

C_TypeDef x_struct;
C_TypeDef *ptr_struct = &x_struct;

私の質問は、なぜ最初の 2 つが機能しないのですか? これは私を悩ませています。

4

2 に答える 2

2

最初のバージョンの問題は、ポイントするものにメモリを割り当てなかったことptr_structです。通常、セグメンテーション違反が発生します。これは次で修正されています。

C_TypeDef x_struct;
C_TypeDef *ptr_struct = &x_struct;

そのため、3 番目のバージョンが機能します。では、2 番目のバージョンの何が問題になっているのでしょうか。関数の外でグローバル変数を割り当てることはできないため、3 番目のバージョンで行ったように初期化するか、次のように関数で割り当てる必要があります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 に答える