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);
}

在这里,我需要分配堆栈的符号数组,即“...”,但我无法弄清楚它的语法,请帮助:)

4

4 回答 4

4
malloc(size * sizeof(struct table*));
于 2009-12-21T15:44:22.763 回答
4
(struct table **)malloc(size * sizeof(struct table*));

但那是如果你想一次预分配所有空间。如果你想在你去的时候分配更多,你可以从小于的东西开始,size当你用完空间时在你的 push() 函数中分配更多。

于 2009-12-21T15:47:27.653 回答
1

符号是指向结构表指针的一维数组还是结构表的二维数组?

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

对于任何值numberOfElements。鉴于 stck->symbolsstruct 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 回答