| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 396 人关注过本帖
标题:函数的传值
只看楼主 加入收藏
中国电信
Rank: 1
等 级:新手上路
帖 子:16
专家分:9
注 册:2013-10-20
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
函数的传值
以前以为函数传值搞懂了,过了一段时间没写程序了。现在写程序满满的都是错误,今天写一个关于栈的函数结果在传值的时候有些变量的值搞的我和自己想的有所不同,下面是代码麻烦解释一下。
#define MAXE 10
typedef struct name
{
char build[MAXE][21];
int top;
}luxian;
int push(luxian *lu2)
{
char name[21];
if(lu2->top==MAXE-1)
{
return(0);
}
printf("请输入地址\n");
scanf("%s",name);
lu2->top++;
printf("%d\n",lu2->top);
strcpy(lu2->build[lu2->top],name);
return(1);
}
当我在主函数中传一个luxian类型的指针(p)给push函数的时候,当我调用完了这函数的时候其中p->build当前的字符串是刚刚调用函数中输入的,可是p->top的值却没有改变,怎么回事?
我以前理解的是一个结构体变量的地址传过去了这个结构体当中的变量在被调用函数里修改了其中的值也会随着被修改。可经过上面的例子的实践这个结论明显是错的!
麻烦各位老手说一下这函数传值的具体结论,麻烦详细点,深入点。(如果可以的话可以和我讲一下系统在调用函数时的变量在内存栈中的变化)谢谢!
搜索更多相关主题的帖子: return 
2013-10-23 20:10
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:5 
你把全部代码发上来看看。
2013-10-24 09:06
中国电信
Rank: 1
等 级:新手上路
帖 子:16
专家分:9
注 册:2013-10-20
收藏
得分:0 
回复 2楼 heroinearth
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXE 10
typedef struct name
{
char build[MAXE][21];
int top;
}luxian;
luxian * create(void);
int push(luxian *lu2);
char * pop(luxian *lu3);
int sempty(luxian *lu4);
int main()
{
int i;//判断入栈是否成功
char *zu[21];//用来存储出栈时的所有元素
char *p;//用来接收出栈元素的那个元素
luxian *lu=NULL;
lu=create();
i=push(lu);
printf("%d\n",lu->top);
printf("%d\n",i);
strcpy(*(zu[1]),pop(lu));
printf("%d\n",i);

}
luxian* create(void)
{
luxian *luxian1;
luxian1=(luxian *)malloc(sizeof(luxian));
luxian1->build[MAXE][21]=0;
luxian1->top=-1;
return(luxian1);
}

int push(luxian *lu2)
{
char name[21];
if(lu2->top==MAXE-1)
{
return(0);
}
printf("请输入地址\n");
scanf("%s",name);
lu2->top++;
printf("%d\n",lu2->top);
strcpy(lu2->build[lu2->top],name);
return(1);
}
char * pop(luxian *lu3)
{
char *p;
printf("%s\n",lu3->build[lu3->top]);

if(sempty(lu3))
{
printf("栈为空了\n");
return;
}
else
{
p=(char *)malloc(21*sizeof(char));
printf("%s\n",lu3->build[lu3->top]);
strcpy(*p,lu3->build[lu3->top]);
printf("dazhele1\n");
lu3->top--;
return(*p);


}
}

int sempty(luxian *lu4)
{
if(lu4->top==-1)
{
return 0;
}
else
{
return 1;
}
}
2013-10-24 11:28
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
收藏
得分:0 
这个程序写的太糟糕了,改不下去。

~~~~~~我的明天我知道~~~。
2013-10-24 11:45
中国电信
Rank: 1
等 级:新手上路
帖 子:16
专家分:9
注 册:2013-10-20
收藏
得分:0 
唉,知道了,那上面的代码和我之前的问题没什么反证关系。只是一下子搞混了,不好意思
2013-10-24 11:48
快速回复:函数的传值
数据加载中...
 
   



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

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