struct
の場合は、実行できます
*p = {var1, var2..};
しかし、これはunion
では機能しないようです:
union Ptrlist
{
Ptrlist *next;
State *s;
};
Ptrlist *l;
l = allocate_space();
*l = {NULL};
取得するだけ:
expected expression before ‘{’ token
C99では、d で指定された共用体初期化子 を使用できます。
union {
char birthday[9];
int age;
float weight;
} people = { .age = 14 };
C++では、 共用体にコンストラクター を含めることができます。
C89では、明示的に行う必要があります。
typedef union {
int x;
float y;
void *z;
} thing_t;
thing_t foo;
foo.x = 2;
ちなみに、Cの共用体では、 すべてのメンバーが同じメモリ空間を共有していることをご存知ですか ?
int main ()
{
thing_t foo;
printf("x: %p y: %p z: %p\n",
&foo.x, &foo.y, &foo.z );
return 0;
}
出力:
x:0xbfbefebc y:0xbfbefebc z:0xbfbefebc
初期化と割り当てには違いがあります。初期化はインテリジェントですが、割り当てでは適切なアドレスを解決する必要があります。
例 char str [] = "xyz"; //機能する-初期化 char str [10]; str = "xyz"; //エラー-割り当て // strは文字列ではなく文字を保持できるアドレス 同様に Ptrlist l = {NULL}; //機能-初期化 Ptrlist * l; l-> next = NULL; //割り当てを機能させる l = {NULL}; //割り当てです。アドレススペースエラーがわかりません
union Ptrlist1
{
char *next;
char *s;
};
union Ptrlist1 l = { NULL };
ユニオンの初期化の例をご覧ください。あなたの場合、私はいくつかの間違いがあると思います
Ptrlist how can be member of union..??
あなたは書くべきです
union Ptrlist
{
union Ptrlist *next;
State *s;
};
フィールドの1つをNULLに割り当てます。ユニオンなので、すべてのフィールドはNULLになります。
State
クラスがないので、intに置き換えました。
これは私のコードです:
union Ptrlist
{
Ptrlist *next;
int *n;
};
int main(int argc, char** argv)
{
Ptrlist *l = new Ptrlist;
// I'm using a way c++ allocated memory here, you can change it to malloc.
l->n = new int;
*(l->n) = 10;
// Because you used an union, n's and next's addres is same
// and this will output 10
printf("%d", *(l->next));
getch();
return 0;
}
このようにして、nの値は10に初期化されます