1

CS クラスでの今週の課題では、現在のプログラムを修正して、すべての配列にメモリを動的に割り当てる必要があります。空の要素でメモリが浪費されないようにする必要があります。これを行うには、文字配列を一時配列に割り当て、一時のサイズをチェックしてから、そのサイズの配列を割り当てます。

とにかく、構造体でそれを行う方法がわかりません。たとえば、メモリを動的に割り当てる方法を知っています

int* pointer = new int(5);

しかし、構造体メンバーに対してどのように行うのですか? サイズを前もって定義しない限り、その型の構造体を宣言するときに、コンピューターはどれだけのスペースを割り当てるかを認識できないようです。

現在、私の構造体定義は次のようになっています。

struct card
   {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   };

サイズを指定せずに、すべての配列を動的に宣言するように変更するにはどうすればよいですか?

4

4 に答える 4

3
struct card
{
   char* rank;
   char* suit;
   char color;
   bool dealt;
   char* location;
};

この構造体が格納するのは割り当てられたメモリへのポインタだけであるため、コンパイラは割り当てているサイズを知る必要はありません。

ポインターのサイズ、つまり構造体は、それぞれ 1 つの要素を割り当てても、それぞれ 1000 要素を割り当てても同じになります。

card c;
c.location = new char[10];

ps 確認したところ、以下のコードが 5 つの要素を割り当てるのではなく、1 つの要素を割り当ててそれを 5 に設定していることに気付きましたか? 2 つの用途の違いについては、ウィキペディアを参照してください。

int* pointer = new int(5);
于 2013-02-22T05:12:31.230 に答える
3
struct card
   {
    char *rank;
    char *suit;
    char color;
    bool dealt;
    char *location;
   };

構造内のポインターを取得し、それらに動的にメモリを割り当てるだけで、使用後に解放することを忘れないでください..

于 2013-02-22T05:13:33.480 に答える
1

char* ランクを使用していますか? そして、あなたがそれを使うとき、 card->rank = malloc(sizeof(char)*size)?

于 2013-02-22T05:17:21.090 に答える
-1

いずれにせよ、構造体変数を変更する必要はありません。typedef を使用して呼び出し方を変更するだけです。

typdef struct _CARD
   {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   } CARD;

CARD の使用の配列を初期化するには:

CARD* card;
#define ARRSIZE 12

card = (CARD*)malloc(sizeof(CARD)*ARRSIZE);

構造体をより動的に割り当てるには、構造体自体をポインターとして呼び出してリンク リストを使用します。 typdef struct _CARD

 typdef struct _CARD {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   struct _CARD  *_next;
   } CARD;

必要に応じてすべての構造体を初期化し、_next ポインターを使用してそれらをバインドします。

    CARD *card,*tmp,*final,*first,*etc;
    card = (CARD*)malloc(sizeof(CARD));
    tmp= (CARD*)malloc(sizeof(CARD));
    card->_next = tmp;
    final = (CARD*)malloc(sizeof(CARD));
    tmp->_next = final;
    final->_next = NULL;

など、動的に作成された構造体とその結合を管理するための追加機能が必要です。

于 2013-02-22T06:22:08.237 に答える