指针C的麻烦

时间:2017-02-02 17:59:05

标签: c pointers

我认为我对指针有一点了解,但是我的代码遇到了问题。它一直在崩溃。

每当我尝试访问堆栈并将其内容传递给b1时,我的程序崩溃。

int base(int l, int base, int *stack[2000])
{  
    int b1; //find base L levels down
    b1 = base; 

    while (l > 0)
    {
        b1 = *stack[b1 + 1];
        l--;
    } 

    return b1;
}

编辑:该程序是使用堆栈架构的虚拟机分配。我传递的是当前的基本激活记录,以及我试图访问的词典级别。简单地说,它们是整数。我通过指针访问我的堆栈并返回激活级别的基础我应该在,但我不完全确定我是否正确使用指针。

1 个答案:

答案 0 :(得分:0)

非常确定你将指针取消引用额外的时间,并在初始声明中添加额外的星号。如果你的函数接受一个整数数组,正如编辑建议的那样,将其声明为

int base(int l, int base, int stack[2000])

int *stack[2000]是一个指向整数的指针数组,而不是一个整数数组。然后,您需要更改b1 = *stack[b1 + 1];以从数组中获取整数,而不是取消引用指向整数的指针:

b1 = stack[b1 + 1];

最后,您可以在同一行声明并指定b1

int b1 = base;

但是,真的,你根本不需要b1。由于您可以根据C是按值传递的事实递减l,因此您可以以相同的方式重新分配base而没有任何问题。