-4

ポインターに int 値を代入する必要があります。

以下は、私が欲しいものの小さな例です。

struct {
  int a;
} name;
int temp = 3;
struct name *obj = NULL;

ここで、この値「3」を構造体の「a」に割り当てる必要があります。

4

6 に答える 6

4

struct {
   int a;
}name;

構造体にメモリを割り当てる構造体変数を既に定義しています (たとえば、関数内のローカル変数の場合はスタック上)。次に、int temp = 3;のように構造体メンバーに代入するだけで十分です

name.a = temp;

構造体型のみを宣言する場合は、次を使用します

struct name {
   int a;
};

次に、この型に基づいて任意の数の構造体変数を定義できます。

struct name theName;

theName上記と同じメンバーへの割り当てを行います。

theName.a = temp;

または、構造体へのポインターを定義してから、自分でメモリを割り当てる必要があります。

struct name *namePtr;
namePtr = malloc(sizeof(struct name));
namePtr->a = temp;

Cまた、質問にと- 特に構造体の両方でタグを付けたことにも注意してください。C++どの言語を使用するかを決定する必要があります - C と C++ の構造体の違いを参照してください。

于 2013-08-08T05:52:54.350 に答える
1

コードの基本的な問題はname、構造体の名前ではなく、名前が既に定義されている構造体のオブジェクトまたは変数です。

構造体に名前を付けたくない場合でも、メモリを割り当てる必要があります。

struct
{
        int a;
}name, *obj;
int temp = 3;

int main()
{
        obj=&name;    // 'obj' is pointing to memory area of 'name' : Keep this in mind throughout the code 
        obj->a=temp;
        printf("%d %u %d",temp,&temp,obj->a);
        return 0;
}

最良のオプションは、構造体に名前を付け、メモリを割り当てた後にそのポインタを使用することです

typedef struct
{
        int a;
}name;
int temp = 3;
name *obj = NULL;

int main()
{
        obj = (name *)malloc(sizeof(name));
        obj->a=temp;
        printf("%d %u %d",temp,&temp,obj->a);
        return 0;
}
于 2013-08-08T06:06:08.530 に答える
-1
obj->a = temp;

試してみてください!

于 2013-08-08T07:40:58.720 に答える