ポインターに int 値を代入する必要があります。
以下は、私が欲しいものの小さな例です。
struct {
int a;
} name;
int temp = 3;
struct name *obj = NULL;
ここで、この値「3」を構造体の「a」に割り当てる必要があります。
と
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++ の構造体の違いを参照してください。
コードの基本的な問題は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;
}
obj->a = temp;
試してみてください!