我认为我对指针有一点了解,但是我的代码遇到了问题。它一直在崩溃。
每当我尝试访问堆栈并将其内容传递给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;
}
编辑:该程序是使用堆栈架构的虚拟机分配。我传递的是当前的基本激活记录,以及我试图访问的词典级别。简单地说,它们是整数。我通过指针访问我的堆栈并返回激活级别的基础我应该在,但我不完全确定我是否正确使用指针。
答案 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
而没有任何问题。