说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一个关于指针关的问题

编辑:说三道四文库 发布时间:2017-05-26 03:37
HTML文档下载 WORD文档下载 PDF文档下载
首先是二叉树:
typedef struct node
{
int key;
struct node *lchild,*rchild;
}Pnode,*BTree;
void CreatTree(BTree &T,int n)
调用这个函数的时候是 
BTree T;
CreatTree(T,10);
接着是栈的
typedef struct node
{
int data;
struct node *next;
}pNode,*NODE;

typedef struct
{
NODE top,bot;
}stack,*Linkstack;
void CreatStack(Linkstack &s)
调用这个函数的时候是
Linkstack s;
CreatStack(s)


上面两个是我二叉树和栈的代码里截取出来的片段,
然后我发现,二叉树那样定义和调用是没问题的,
但是到栈那就不行了,运行的时候直接弹出个错误框,栈那里要改成
void CreatStack(Linkstack s)
stack s;
CreatStack(&s);
这样才不会出错,这样改我知道是没问题的,但是不明白的有两个
1.二叉树那里定义成 BTree &,直接把实参传进去却可以改变实参的值,
  而学指针的时候,实参把地址传给指针形参,这样就能改变实参的值了,但
  现在这样定义反而有种反过来的感觉,但也可以,这两种有什么区别?
2.既然二叉树那样定义成功,为什么栈那样定义却运行不到?

求大神教下小弟我
1.BTree &T叫做引用,可以理解成把实参直接传递到函数中了,没有拷贝副本
2.没看出什么问题,CreateStack内部的问题吧
引用 1 楼 a345485527 的回复:
1.BTree &T叫做引用,可以理解成把实参直接传递到函数中了,没有拷贝副本
2.没看出什么问题,CreateStack内部的问题吧

那你帮我看看
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE
{
int data;
struct NODE *next;
}QNODE,*Qnode;
typedef struct
{
Qnode top;
Qnode bot;
}STACK,*stack;

void Init(stack &s)//初始化
{
s->top=(Qnode)malloc(sizeof(NODE));
s->bot=s->top;
s->top->next=NULL;
}
void push(stack s,int e)//入栈
{
Qnode p=(Qnode)malloc(sizeof(NODE));
p->data=e;
p->next=s->top;
s->top=p;
}
void traverse(stack s)//遍历
{
    Qnode p=s->top;
while(p!=s->bot)
{
printf("%d ",p->data);
p=p->next;
}
}
void pop(stack s)//出栈
{
Qnode p=(Qnode)malloc(sizeof(NODE));
p=s->top;
s->top=p->next;
free(p);
p->next=NULL;
}
int main()
{
stack s;
Init(s);
}
记住,使用指针之前必须要初始化或者为它分配内存,
在主函数中定义的s是一个指针,而在Init函数中,你只为s->top(也就是QNODE)分配了内存,而没有为s自身分配内存
下面是改正过的:

void Init(stack &s)//初始化
{
s=(stack)malloc(sizeof(STACK));//给s分配内存
s->top=(Qnode)malloc(sizeof(NODE));//然后再给s->top分配内存
s->bot=s->top;
s->top->next=NULL;
}
引用 3 楼 a345485527 的回复:
记住,使用指针之前必须要初始化或者为它分配内存,
在主函数中定义的s是一个指针,而在Init函数中,你只为s->top(也就是QNODE)分配了内存,而没有为s自身分配内存
下面是改正过的:

void Init(stack &s)//初始化
{
s=(stack)malloc(sizeof(STACK));//给s分配内存
s->top=(Qnode)malloc(sizeof(NODE));//然后再给s->top分配内存
s->bot=s->top;
s->top->next=NULL;
}

可是当我换成
void CreatStack(Linkstack s)
stack s;
CreatStack(&s);
这种形式的时候,函数里面也没分配啊,但是程序运行的到= = 
还有,当我用stack定义s的时候不是系统就已经分配好内存了么? 
void CreatStack(Linkstack s) 这时把s复制一个
stack s;
CreatStack(&s);

不报错并不等于正确,你上面代码应该是什么也没做。你也没给CreatStack的源代码
引用 5 楼 buyong 的回复:
void CreatStack(Linkstack s) 这时把s复制一个
stack s;
CreatStack(&s);

不报错并不等于正确,你上面代码应该是什么也没做。你也没给CreatStack的源代码

我在回复给了代码了,我改成这样后,遍历,插入,都可以啊= =
举个简单的例子

typedef struct {
int val;
}A,*pA;

int main()
{
//下3行正常运行,
A a;
a.val=123;
printf("%d\n",a.val);

pA ptr;//定义指针
ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看
ptr->val=123;
printf("%d\n",ptr->val);
free(ptr);
}
引用 7 楼 a345485527 的回复:
举个简单的例子

typedef struct {
int val;
}A,*pA;

int main()
{
//下3行正常运行,
A a;
a.val=123;
printf("%d\n",a.val);

pA ptr;//定义指针
ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看
ptr->val=123;
printf("%d\n",ptr->val);
free(ptr);
}

嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =
引用 8 楼 u013160932 的回复:
Quote: 引用 7 楼 a345485527 的回复:

举个简单的例子

typedef struct {
int val;
}A,*pA;

int main()
{
//下3行正常运行,
A a;
a.val=123;
printf("%d\n",a.val);

pA ptr;//定义指针
ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看
ptr->val=123;
printf("%d\n",ptr->val);
free(ptr);
}

嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =

哦哦,我知道哪错了= =
引用 9 楼 u013160932 的回复:
Quote: 引用 8 楼 u013160932 的回复:

Quote: 引用 7 楼 a345485527 的回复:

举个简单的例子

typedef struct {
int val;
}A,*pA;

int main()
{
//下3行正常运行,
A a;
a.val=123;
printf("%d\n",a.val);

pA ptr;//定义指针
ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看
ptr->val=123;
printf("%d\n",ptr->val);
free(ptr);
}

嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =

哦哦,我知道哪错了= =

加油吧,跨年还能静下心来编程,可赞
引用 10 楼 a345485527 的回复:
Quote: 引用 9 楼 u013160932 的回复:

Quote: 引用 8 楼 u013160932 的回复:

Quote: 引用 7 楼 a345485527 的回复:

举个简单的例子

typedef struct {
int val;
}A,*pA;

int main()
{
//下3行正常运行,
A a;
a.val=123;
printf("%d\n",a.val);

pA ptr;//定义指针
ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看
ptr->val=123;
printf("%d\n",ptr->val);
free(ptr);
}

嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =

哦哦,我知道哪错了= =

加油吧,跨年还能静下心来编程,可赞

谢谢大神的帮忙和鼓励
AWS副总裁谈数据中心网络打造 【最具价值CTO评选秀】出门问问CTO雷欣:从技术极客到核心管理的秘密 《近匠》APICloud:“云”+“端”一体的移动API提供者 Oculus移动SDK发布!John Carmack操刀、集成Unity 4.5 11月15日深圳见!深圳微信开发者大会公布全部议程 参与2014中国大数据行业大调查 BDTC门票等你拿 HTML5规范尘埃落定,5个开发工具推荐 盘点最受开发者喜爱的Android 5.0 Lollipop API IoE Day侧记:想开发智能硬件?先要弄明白这几个问题 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二) 微软承诺所有Lumia WP8设备将升级至Win10,用户会买账吗? 周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 中国大数据六大技术变迁记 【最具价值CTO评选秀】当当网CTO熊长青:结合行业及技术发展,规划技术方向 社交颠覆传统,环信技术交流沙龙纪实(组图) 揭秘经典案例炼成之道 微信开发者大会精华回顾 从一家电子商务网站学到的经验教训 【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 【最具价值CTO评选秀】携程高级技术副总裁叶亚明:从呼叫中心到移动互联网的演进 为什么靠谱的公司都应该参加CTO评选? 【深度剖析】微软开源.NET:战略重心已从PC转移到云端 专访POWER 8编程挑战赛选手黄文超:非科生的编程算法之路 BDTC 2014干货精彩不断,四大全天技术论坛议题全面曝光 全功能API!开源2D游戏引擎Firmament 微信公众平台新增“微信连Wi-Fi”功能,打通线上线下闭环 马化腾:微信在一线城市活跃 QQ增长从城市到农村 回复:機會不要錯過! 華強科技有限公司幫你成就軟件工程師的夢想! How to access SMB/CIFS from Sun workstation? 谁来拿分啊。我有一个问题自己解决了,但没有给分的对象。 问一个message Bean的问题,up有分 [EJB]HelloWorldBean正确编译配置和执行,但"HelloWorld"却不见了 寻C语言编程高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 如何让主界面变成三维的那种 寻C语言编程高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 用什么组件能得到网站上的末知大小的文件? 问一个简单的问题 还是有问题关于获得选中安钮的当前行,请进>> 请教简单问题,如何将菜单的一个选项隐藏。就是类似cb的将Visible=false的做法!! 连接ACCESS数据库的问题? 寻C语言编程高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 如何提取一个EXE文件的特征码??要高分者和高手进!!!!来者有分! j2ee配置问题,大家帮我看看,错误出在哪里?谢了! 如何在注册表中修改使得浏览的网页可以即时通过工具栏的“编辑”调用DW修改? "聊聊"网站是怎样建的?用拉什么技术,可以即使聊天? 类型转换,非常奇怪的问题。高手进来 搞纯C++的大虾请进 关于MDI Child窗口的一个问题? DOS6.22的下载及6.0源码 sql语句问题:怎样从表中选出字段值包含在一个变量字串的那条记录。100分!在线等待! 关于那个mesh绕自己中心(注意是自己中心)旋转的问题我还没有解决 抛砖引玉: 证券行业软件之数据库存储。 如果下面这个问题谁能解决,我跪下来拜他三下:在WIN2000里,通过更改注册表,以达到更改IE的页面设置(一定要能更改横向:orientation和 过程的问题!!! 一个非常难的问题---挑战这里所有的高手!(解决了,分数我可以追加到200) 用vc7时候怎么导入一张图片作资源?还有怎么添加popup菜单 有关取得一个Tree Control的一个Notify的问题! 关于delphi中用ADO连接数据库的问题!!(欢迎up)在线等待! 急问各位高手,在CB里怎么设置数据库的相对路径。 有一份北京的工作,需要懂php+mySql+linux,有兴趣的请和我联系 请问能否把报表预览控件中的“CLOSE”安钮改成中文的”关闭“安钮? 如果有一可用程序,打开什么文件(后缀名)能运行?我是新手 怎么关闭一个窗体? 多对多关系是不是要做一个对应表 定时器问题。。。。。。 为什么我用activeskin后~~ 不能放其他控件的~ 例如Shape 还有 media player这些控件啊 求解一个“排序”的问题。 哪个有图形按钮的类,给我一份 关于程序员考试的学习问题。。 请问哪里有XML V4。0下载呀1 再叙PB7获取当前路径问题 菜鸟问题:请问jar是干什么用的,怎么用? 调查一下,你们除了到csdn外,还到哪里呢?我现在一上网就跑到这里来,别的地方我都忘了。 当鼠标移动到弹出菜单的某项时,菜单对应项改变颜色。是如何做到的? 请问如何在VB中存取OLE字段中的电子表格,谢谢,我是新手,请帮忙。 急救。。语句错在哪?adoquery1.SQL.add('select ygdm,ygxm from user where ygdm='''+edit1.text+''''); 系统有win2000,重装win98后没有系统引导菜单了 不知道在MFC中用CBrush怎样来实现空画刷. 现在四川渠县的房价如何? 英语翻译就是这题我题目都没太看懂 以走好人生第一步路为主题的作文想一个好题目 楼顶、屋顶、房顶、厂房、彩钢板隔热,建筑的楼顶、屋顶、房顶、厂房、彩钢板隔热防水涂料如何,听朋友介绍,北京志盛威华公司的防晒隔热涂料隔热解决建筑的楼顶、屋顶、房顶、厂房、 英语翻译我想问的是,如果题目里面说是 一个DNA有1200个碱基,那么它控制蛋白质合成的DNA的碱基是不是只要算600个,就是说 控制蛋白质合成DNA的碱基只是算转录链上的碱基?那么,如果说是控制 正弦波电压半波整流波形的波峰因数是多少?最好提供准确值. 铝箔表面变黑 是什么物质 什么是隔热保温涂料啊?隔热保温涂料配方是哪些啊想要了解一下隔热保温涂料配方,有没有好一点的公司能够帮助分析一下啊? 生物中复制、转录、翻译之间的联系和相互关系最好能列表,谢谢! 暑假生活37页的所有语文五年级冀教版 轻松快乐过暑假七下语文,英语答案(江苏人民出版社的) 为什么种子没有土壤也能发芽吗 语文暑假生活 冀教版 五年级下册 32页阅读练习怎么写?32页阅读练习  郑人有且置履者,先自度其足而置之其坐,至之市而忘操之.已得履,乃曰:“吾忘持度.”反归取之.及反,市罢,遂不得履. 江苏轻松快乐过暑假七年级2011-2012 语文 英语全部的答案好的再给分 白醋的美容功效 语文暑假生活 冀教版 五年级下册第13页第二大题 急哦.........二、请根据意思分别填写各属于哪种读书方式. 例:拿到一本书,从头到尾简单看一遍,叫(略读).  1.从大量 甲、乙两人共有存款900元,甲的存款是乙的五分之四,乙有存款多少元?(列式)急需!谢谢! 这想成语怎么填 水仙花和丝瓜花它们花中是否都有雄蕊和雌蕊? 1只鹅=1只鸡+1只兔+1只鸟=3只兔=2只鸡 问1只鹅=几只鸟 白醋会腐蚀金属吗?我现在天天用白醋洗脸,但是我手上戴着手链,时间一长会被腐蚀吗? 要全部的哦!是远方出版社出版的! 搜狗输入法打繁体字 白醋为什么会腐蚀鸡蛋 长江三峡是哪三峡? 怎么用搜狗打繁体字 林大爷养了300只鸡,养的鹅的只数比鸡少6分之1.林大爷养的鹅有多少只?这个问题我没有学,我生病了,如果对了, p20 指鹿为马 和 伶牙俐齿 的对子p21 ( )上树——全靠一张嘴p25 鲁肃上了孔明的船——( )p29 林冲误闯白虎堂——( ) 诸葛亮大摆空城计——( )p30( )打宋江——过后赔礼p37 根据诗 在细胞生物中,RNA是DNA转录来的?如题 王大娘去农贸市场卖了2只鹅和6只鸡.一只鸡的价钱是1只鹅的2分之1.王大娘总共卖得的钱相当于()只鸡的钱,或者相当于()只鹅的钱 花的雄蕊有哪些部分组成 高中生物有关DNA的转录下图表示某正常基因及指导合成的多肽顺序.D位点发生的突变导致肽键延长停止的是(除图中密码子外,已知GAC天冬氨酸,CGU甘氨酸,GGG甘氨酸,AUG甲硫氨酸,UAG终止)A.G/C→A 李大爷家有鸡和鹅200只、鹅比鸡少40只、鹅和鸡各多少只? 花最重要的结构是雌蕊还是雄蕊?快 翻译从3'端开始还是5'端开始?转录呢?DNA呢? 英语翻译A.DNA、RNA、蛋白质B.DNA、RNA、氨基酸 花的雄蕊由什么构成? 苏教版快乐暑假语文答案 作文如何迈好高中第一步 铝材 小料是什么 深圳激光泵浦灯|深圳激光泵浦灯批发网|深圳激光泵浦灯厂家在哪里? 作文大全800字如何迈好高中第一步 求铝窗开料软件,铝材开料软件, 灯泵浦激光打标机有没有半导体激光打标机好用同标题 求300V降到220v的直流降压电路图负载有600W不能用线圈 YAG金属激光打标机多少钱 中国黄金手链上千足金什么意思? 英语翻译决定氨基酸的密码子指的为什么是mRNA上的三个相邻碱基,而不是DNA上的三个相邻碱基?基因应该是决定蛋白质的合成啊. 一辆汽车从甲地开往乙地,9小时行了全程的九分之五,照这样计算,行完全程要几小时?(用比例知识解)急,帮个忙啊!~ 你们用搜狗打了多少字了- -输入统计:共24天28938字今日已打:168字 小麦播种之后需要多少天才能镇压?是等小麦出苗了以后吗?知道的请回答, 正常汽车行驶速度80?(单位) 请问大家的搜狗打了多少字? 小麦一般几天出苗? 小轿车行驶速度是每小时80千米,高速铁路列车的行驶速度比小轿车行驶速度的4倍还多30千米,高速铁路列车的行驶速度是多少? 用搜狗怎么打日本字拜托了各位 谢谢 8月30日过35小时又11分等于几日几时? 800个()小于80个()小于8个()填适当数量单位 转录和翻译的模板分别是什么? 小麦多长时间出苗
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘