用指针作为函数参数只能改变指针的值,不能改变指针的地址!。所以void InitStack(struct stacktype * s)中的s是是实参&S的一个拷贝,只是二者指向同一个地址而已,然后函数中改变s指向的地址s = (struct stacktype *)malloc(sizeof(struct stacktype)); 但这与&S没有关系,以为这是两个不同的指针而已,于是再改变s的值就与&S无关了。
默认情况下,S.top应该会输出随机值,因为它根本没有初始化。
忘记了S是全局变量,默认初始为0!
我看应该是做栈的吧,只是不知道你既然用了数组来实现,为什么又用malloc呢?
可以在main函数里面声明和初始化。。。