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

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的地址的话可能会出错

    评论

报告相同问题?

悬赏问题

  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机