0

これは私の構造の定義です

    typedef struct treeNode
     {
        int data,pos;
        char name[16];
        struct treeNode *left;
        struct treeNode *right;
     }treeNode;

動的オブジェクトを作成しました

treeNode *temp;
            temp = (treeNode *)malloc(sizeof(treeNode));

データに値を割り当てる必要がある場合、どのように割り当てる必要がありますか

scanf("%d",temp->data);   //or
scanf("%d",&(temp->data)); //why? because all scanf will look for is address to a location which could be done by temp->data;

これはデータへのアクセスにも当てはまります。つまり、整数部分にアクセスするにはどうすればよいですか?

temp->data; //or
*(temp->data) 
4

2 に答える 2

2

scanf("%d",&temp->data);

scanf() には変数のアドレスが必要だからです。それぞれの変換指定子について、scanf() は、対応する引数が適切な型へのポインターであることを期待します: %d は型 int * の引数を期待し、%f は型 double * の引数を期待し、%c と %s は両方とも引数を期待しますタイプ char * など

scanf() の動作は、scanf()についてのより多くのアイデアを提供します。

temp->data基本的に と同等であるため、アクセスするためで十分(*temp).dataです。

アクセスしようとすると、*(temp->data)未定義の動作がトリガーされます。なぜなら、他のプロセスのコンテキストにある可能性のあるメモリの場所にアクセスしているためです。

たとえば、temp->data が 100 の場合、*(temp->data) は *(100) を意味します。つまり、メモリ位置 100 にアクセスします。

于 2012-12-05T06:31:49.173 に答える
0

関数に渡されるパラメーターの値を設定する場合は常に、アドレスを送信する必要があります。scanf にそのパラメーターの値を入力させたいので、アドレスを使用する必要があります。(構造体要素が既に (メモリが割り当てられた) ポインターである場合、& は必要ないことに注意してください)。

ただし、何かを読みたい場合は、アドレスを使用する必要はありません。直接使用することができます。

于 2012-12-05T06:35:59.630 に答える