Agent_John
2016-12-06 14:54
采纳率: 0%
浏览 2.2k

C语言的顺序栈初始化问题

//用顺序表实现堆栈
//包含printf与scanf函数
#include
//包含malloc函数
#include

//v是分配的内存空间的首地址,m是分配的空间的大小(代表了表的总长),n为表的实际长度
//n的初值较为重要。一定要获得栈顶元素的位置

void init_sq_LList(int **v,int m,int n)
{
*v =(int
)malloc(sizeof(int)*m) ;
*n = -1;

}

//入栈函数
void push_sq_LList(int *v,int m,int *n){

int d,k;

k=*n+1;

//判断栈的空间是否用完
if(k<m){

    printf("请输入一个整数\n");
    scanf("%d",&d);
    v[k]=d;

    *n=k;

}
else printf("栈的空间已满!\n");

}

//出栈函数
void pop_sq_LList(int* v,int m, int* n){

int k=*n;

if(k<0) printf("栈为空!\n");
else{

printf("出栈的元素为:%d\n",v[k]);

*n=k-1;

}

}

//打印函数
void dis_sq_LList(int* v, int n)
{
int i;

if((v!=NULL)&&(n>0))
{
    for(i=0;i<=n;i++) printf("%d    ",v[i]);

    printf("\n");

}
else printf("没有数据!\n");

}

int main()
{
int *v,m,n;
int i=0,j;

printf("输入栈的大小:\n");
scanf("%d",&m);

//创建栈
init_sq_LList(&v,m,&n);//void init_sq_LList(int **v,int m, int *n)

while(i<3){

    printf("0——入栈 1——出栈 2——打印 3——退出程序\n");

    scanf("%d",&j);
    switch(j)
    {

    case 0:{
            push_sq_LList(v,m,&n);//int *v,m,n; void push_sq_LList(int* v,int m, int* n)//
            break;
            }
    case 1:{

            pop_sq_LList(v,m,&n);//int *v,m,n; void pop_sq_LList(int* v,int m, int* n)//
            break;

           }
    case 2:{

            dis_sq_LList(v,n);//int *v,n; void dis_sq_LList(int* v, int n)//
            break;

           }
    case 3: {
            i=4;
            break;
            }

    }

}
free(v);
v=NULL;

return 0;
}
代码如上,想知道在init函数中为什么是使用int **v,而非int *v?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 凝视深空 2016-12-07 00:34

    因为主函数里面v还没有分配内存,如果直接传v而不是v的地址的话可能会出错

    点赞 打赏 评论

相关推荐 更多相似问题