具有数组的C堆栈

问题描述 投票:0回答:1

我正在尝试将数组存储在堆栈中;

int *orderStack[2];
int orderSize=2;
int orderTop=0;

void pushOrder(int newOrder[2]) {


    if(orderTop>=orderSize) {
        int i;
        int *stack2 = (int*) malloc(sizeof(int)*orderSize*2);
        for(i=0; i<orderSize; i++) {
            stack2[i] = orderStack[i];
        }

        orderStack = stack2;
        orderSize *= 2;
    }


    orderStack[numberTop][0] = newOrder[0];
    orderStack[numberTop++][0] = newOrder[1];


    int temp, i, j, k;

    for (j = 0; j < numberTop; ++j) {
        for (k = j + 1; k < numberTop; ++k) {
            if (orderStack[j][1] > orderStack[k][1]) {
                temp = orderStack[j][1];
                orderStack[j][1] = orderStack[k][1];
                orderStack[k][1] = temp;
            }
       }
   }
}

但是这会导致以下错误:[Error]为该行的数组类型的表达式赋值

orderStack = stack2;

我阅读了20多个有关此错误,数组和堆栈的问题,但找不到我在做什么错。

c stack
1个回答
0
投票

int * orderStack [2];

在此语句中,您将orderStack声明为数组。编译器在此数组中分配2个插槽,每个插槽可存储一个指向整数的指针。您可以分配给这些插槽:

orderStack[0] = stack1;
orderStack[1] = stack2;

其中stack1和stack2的类型为int *

但是您不能分配orderStack本身-对编译器没有任何意义。

如果您希望能够分配orderStack本身,则可以将其声明为:

int **orderStack;

但是,现在您必须先将其分配给一个数组数组,然后填充该数组的元素(可能是int的数组)

© www.soinside.com 2019 - 2024. All rights reserved.