| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 605 人关注过本帖
标题:关于函数传值的问题!
只看楼主 加入收藏
郁闷→成仙
Rank: 2
等 级:论坛游民
帖 子:12
专家分:27
注 册:2010-1-10
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:4 
关于函数传值的问题!
这是我写的一个顺序栈,功能很简单只有,进栈和出栈
代码如下:
程序代码:
#include<stdio.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 1
#define OK 1
#define ERROR 0

typedef int Status;
typedef int SElemType;

typedef struct{
  SElemType *base;
  SElemType *top;
  int stacksize;
}SqStack;

//构造一个空栈
Status InitStack(SqStack &S)
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
//取栈顶元素
Status GetTop(SqStack &S,SElemType e)
{
if(S.base==S.top) return ERROR;
e=*(S.top-1);
return OK;
}
//进栈
Status Push(SqStack &S,SElemType &e)
{
if(S.top-S.base>=S.stacksize)
{S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
//出栈
Status Pop(SqStack &S,SElemType &e)
{
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
//判断空栈
int stackempty(SqStack S)
{
if(S.base==S.top)  return 1;
else return 0;
}

//输出栈元素
void OutputStack(SqStack &S)
{
int e;
while(!stackempty(S))
{
Pop(S,e);
printf("%d  ",e);
}
}

//主函数
void main(){
int e=1;
SqStack S;
InitStack(S);
printf("请输入要入栈的元素(以0结束):\n");
while(e)
{
scanf("%d",&e);
if(!e) break;
Push(S,e);
}
printf("\n出栈:\n");
OutputStack(S);

}
问:
当我调用OutputStack(S);
我想知道Pop()函数里的e是如何传入OutputStack()中,经printf("%d  ",e);打印出来的。
不是函数结束后,空间立刻释放了,return也没有返回e,那e为什么可以传过去呢?
我当时无意加上去的,结果却能通过,我想不通原理,求达人指教!
搜索更多相关主题的帖子: 传值 函数 
2010-08-18 01:01
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:5 
void OutputStack(SqStack &S)
{
int e; //e是这里定义的
while(!stackempty(S))
{
Pop(S,e);  //pop函数里参数传入的是引用。因此能更新e的值。
printf("%d  ",e);    输出e
}
}
2010-08-18 08:11
郁闷→成仙
Rank: 2
等 级:论坛游民
帖 子:12
专家分:27
注 册:2010-1-10
收藏
得分:0 
回复 2楼 最近不在
传入的引用?什么意思啊?

真的不太明白,能不能说的再细一点,谢谢了
2010-08-18 12:59
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:4 
c里面不是有按值,和按引用传递吗?
void swap(int a, int b);
void swap(int *pa, int *pb);
在数据结构中引入了c++中引用的用法
void swap(int &a, int &b);
关于引用的用法,可以网上搜索

2010-08-18 22:17
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:1 
引用传递,其实粗略的理解为传的是地址,可以对原来的数值改变

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-08-19 20:51
快速回复:关于函数传值的问题!
数据加载中...
 
   



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

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