| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:〔新手求助〕关于指针的问题
只看楼主 加入收藏
drianlv
Rank: 2
等 级:论坛游民
帖 子:15
专家分:12
注 册:2006-3-17
收藏
 问题点数:0 回复次数:1 
〔新手求助〕关于指针的问题


#include<stdio.h>
#include<stdlib.h>
struct Stack_List
{
int data;
struct Stack_List *Next;
};

typedef struct Stack_List Stack ;
typedef Stack* Link ;

Link stack=NULL;


/********************************************/
/* check the stack ( empty or not ) */
/********************************************/

int check()
{
if(stack==NULL)
return 1;
else return 0;
}


/********************************************/
/* print the stack */
/********************************************/

void print(Link Head)
{
Link pointer;
pointer=Head;
if(check(pointer))
printf("The stack is empty\n");
else
{

for(pointer=stack;pointer!=NULL;pointer=pointer->Next)
printf("[%d]",pointer->data);
printf("\n");
}
}


/********************************************/
/* push a data to the satck */
/********************************************/

Link push()
{
int data;
Link New;
New=(Link)malloc(sizeof(Stack));
if(New==NULL)
printf("Memory allocate faulure!\n");
else
{
printf("please input a num you want to push :");
scanf("%d",&data);
New->data=data;
New->Next=stack;
stack=New;
}
return stack;
}

/********************************************/
/* pop a data from the satck */
/********************************************/

Link pop(int *data,int *flag)
{
Link pointer;
printf("Now,you will pop a data from the stack\n");
pointer=stack;
if(check(pointer))
{
*flag=0;
printf("The stack is empty\n");
}
else
{
*flag=1;
stack=stack->Next;
*data=pointer->data;
free(pointer);
}
return stack;
}


int main(void)
{
int choice;
int data;  // 如果这里定义为 *data;
int flag;
while(1){

printf("\t**********************************\n");
printf("\t 1.push a data to the stack;\n");
printf("\t 2.pop a data to the stack;\n");
printf("\t 3.print the stack;\n");
printf("\t 4.Exit the stack system\n");
printf("please input your choice:");
scanf("%d",&choice);
switch(choice){
case 1:
stack=push();
break;
case 2:
stack=pop(&data,&flag); //这里为stack=pop(data,&flag);
if(flag!=0)
printf("the data you pop is %d\n",data); // 这里输出 printf("the data you pop is %d\n",*data);
break;
case 3:
print(stack);
break;
case 4:
exit(0);
default:
printf("Error input \n");
}
}
}

如果把上面的 部分语句用 红色部分代替,为什么执行的时候就会出错 ? 偶菜,高手给点帮助。

[此贴子已经被作者于2006-3-27 14:58:30编辑过]

搜索更多相关主题的帖子: 指针 
2006-03-27 13:52
Cihor
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-3-27
收藏
得分:0 

Link pop(int *data,int *flag) /*如用指针,指向一个变量后,此一般应是这样Link pop(int **data,int *flag),后面**data=pointer->data*/
{
Link pointer;
printf("Now,you will pop a data from the stack\n");
pointer=stack;
if(check(pointer))
{
*flag=0;
printf("The stack is empty\n");
}
else
{
*flag=1;
stack=stack->Next;
*data=pointer->data;/*改为指针后实参并为指向任何变量,此为对野指针的一个赋值,肯定错了!*/
free(pointer);
}
return stack;
}

如有误,欢迎指正!


好好学习,天天向上
2006-03-27 15:10
快速回复:〔新手求助〕关于指针的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved