最近,我一直在使用 void 指针数组在 C 中为通用堆栈编写代码。在做了一些测试之后,一切似乎都很好,直到最后一次测试:
while(i < 9) {
push_pila(mi_pila,(int*)&i);
i++;
}
如您所见,我将 ani
作为参数传递给push_pila
函数。这是push_pila
堆栈中函数的代码:
typedef struct {
void **vec;
int tope;
int16_t max_elementos;
}PILA;
int push_pila(PILA *mi_pila,void *val) {
if(pila_llena(mi_pila)) {
return -1;
}
else {
mi_pila->tope = mi_pila->tope + 1;
mi_pila->vec[mi_pila->tope] = val;
return 0;
}
}
这就是问题所在,因为我的堆栈是一个void*
包含地址值的数组val
。当我传递的值时,i
我传递的是它的地址。在这种情况下的问题是堆栈内的所有值都将包含相同的地址,因此堆栈中的所有值都将相同,因此当我使用 pop 函数弹出堆栈时,我将返回相同的值,这是最后一个的值i
,在我的情况下9
。
这个问题有什么解决办法吗?或者只是这不是在数组中推送元素的最佳方式?