2009-12-21 112 views
0

typedef结构 { struct table ** symbols; //堆栈数组 int top; //顶层元素的索引 int size; //堆栈的最大尺寸 }堆栈;指针阵列分配

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

不要忘记检查'malloc's是否成功! – JaakkoK 2009-12-21 15:46:08

+0

如果您在编译时知道确切的大小,请避免malloc。 数组有多大? – 2009-12-21 15:46:13

回答

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

但是,这是否你想要预先分配所有的空间。如果您想要随时分配更多,则可以从小于size开始,并在空间不足时在push()函数中分配更多。

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

可能希望包括演员。 – Skurmedel 2009-12-21 15:46:00

+2

不需要C语言显式转换。 – 2009-12-21 15:46:44

+0

我的不好:)......只是我喜欢当时的明确。 – Skurmedel 2009-12-21 15:50:59

1

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

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

无论什么值numberOfElements。鉴于stck->符号的类型是struct table **,表达式*(stck->symbols)的类型将是struct table *。你也可以写

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

但我更喜欢前一种方法,因为它减少了你必须记住类型的地方的数量。

因为这是C,你需要而不是需要投下malloc()的结果,而且这样做的做法很差;如果您忘记包含stdlib.h或者其他范围内没有malloc()的原型,那么演员将禁止提示您提出问题的警告(尽管由于C99不再允许使用隐式int类型,这可能不再是问题)。

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