1

typedef struct { struct table **symbols; // スタックの配列 int top; //先頭要素のインデックス int size; //スタックの最大サイズ }stack;

void *createStack(int size)
{
  stack *stck;
  stck = (stack *) malloc(sizeof(stack));

  stck->symbols  = ....

  stck->size = size;
  stck->top = -1;
  printf("stack is created --> size is : %d \n",size);
}

ここで、「...」であるスタックのシンボル配列を割り当てる必要がありますが、その構文を理解できませんでした。pls help :)

4

4 に答える 4

4
(struct table **)malloc(size * sizeof(struct table*));

ただし、すべてのスペースを一度に事前に割り当てたい場合はそうです。割り当てを増やしたい場合はsize、スペースが足りなくなったときに、push()関数よりも小さいものから始めて、より多くを割り当てることができます。

于 2009-12-21T15:47:27.653 に答える
4
malloc(size * sizeof(struct table*));
于 2009-12-21T15:44:22.763 に答える
1

シンボルは、構造体テーブルへのポインターの 1 次元配列または構造体テーブルの 2 次元配列であることを意図していますか?

stck->symbols = malloc(sizeof *(stck->symbols) * numberOfElements);

の値に関係なくnumberOfElements。stck->symbolsの型が であるとstruct table **すると、式の型は に*(stck->symbols)なりますstruct table *。あなたも書くことができます

malloc(sizeof (struct table*) * numberOfElements);

しかし、タイプを覚える必要がある場所の数を最小限に抑えるため、私は前者の方法を好みます。

これは C であるため、 の結果をキャストする必要はありませmalloc()。stdlib.h をインクルードするのを忘れた場合、またはスコープ内にプロトタイプがない場合malloc()、キャストは問題を警告する警告を抑制します (ただし、C99 では暗黙的な int 型付けが許可されなくなったため、問題にはならない可能性があります)。 .

于 2009-12-21T15:56:39.460 に答える
0
stck->symbols  = baseaddress = malloc(...required total size...);

int nextDataLocation = baseAddress + numberOfRows*sizeof(void*);

for(int i=0; i<numberOfLines; i++)
{
    stck->symbols[i] = nextDataLocation;
    ..copy string i to address stck->symbols[i]...
    nextDataLocation += lengthOfString[i];
}
于 2009-12-21T16:08:45.407 に答える