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

一个关于指针关的问题

编辑:说三道四文库 发布时间:2017-02-23 02: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);
}

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

哦哦,我知道哪错了= =

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

谢谢大神的帮忙和鼓励
用VB 创建自己的通信程序 用VB5.0开发通信软件的技巧 用VB5开发IE 用VB编写网络寻呼 用VB编写小型的网络系统 用VB创建自己的通信程序 用VB构建Internet的应用 用VB开发标准CGI程序 用VB实现客户——服务器(TCP/IP)编程实例 用VB实现聊天讨论室和点对点会话 用VB写一个定时PING某IP的程序 用VB制作浏览器 用Visual Basic 5.0设计E-mail程序(MAPI) 用Visual Basic6.0编写客户服务器程序 用Visual Basic创建FTP组件 用Visual Basic开发数据库浏览器 用Visual Basic轻松地设计Browser及Ftp程序 VB用Winsock控件发信Email VB用Winsock实现点对点通信 邮件检查程序(二) -VB资料 邮件检查程序(一) -VB资料 在VB程序中怎样挂断拨号网络 在VB中利用UDP协议编写聊天程序 在VB中模拟实现邮件传输 在VB中实现文件上传 在VB中使用UDP协议 在VB中用Outlook发电子邮件 在程序中打开 Internet 拨号连接窗口 -VB资料 在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intrane 在应用中集成浏览器-VB资料 在桌面上建立一个 Internet 快捷键 -VB资料 睡不着觉的快来数绵羊啊——什么?你要数星星呀?那也行啊;-p 我只使用了一个MScomctLib里面的listview,我不想把整个dll包进去,怎么办?。。。 谁知道Microsoft的CAB文件用什么工具可以解开? 我对ADO访问MDB比较菜. 这是我的做的练习请大家帮我看一看 有关针对特定人的邮件用特殊格式显示的可行性探讨 SQL SERVER中的怪问题 几年下来,我们一直用着英文版的VC,不知道VS.NET中有没有中文版的VC? 还没有睡觉的兄弟过来帮我看看这段代码,为什么有错?? ADO最新版哪儿有下载啊? 捆饶很久的问题!!! 急,明天就要交程序了,请问怎么才能知道产生的异常的名称,并拦截? 上午56、下午68,散分先 jsp站点的web服务器需要什么都??怎么设置??那里有说明文档没有啊 怎样在窗口没有显示出来之前将数个小位图“拼成”一个大位图并可以保存,急! win2000的怪问题 快救救我!!!!!!!!!!!!!!! 一个关于c++builder的ado的问题! PACK6是不是有问题? MFC程序的结构问题? 一个酷似chinaasp的社区,需要你的支持。嘿……实在做得很好,送分!!!随便给朋友做做广告 7:30之前一定要交。。。。急。。。。!!!! 文件改名用哪个函数啊? 为什么我的windows2000pro共享文件不能访问????? 在VB.Net中的TabControl有一个OwnerDraw的功能,但不知到如何才能将上面的Item画成有曲线的 一个程序员的路是怎样开始的?我该选择VB还是C语言? 那里有动态加载控件的文章??? 哪位高手告知学习C++/VC++的步骤和各阶段应看的书。 湖北的有查到分数的没有,怎么查,我天天晚上做恶梦,救救我! 能否请高手指教关于开在开机时屏蔽热键的问题(del+alt+ctrl)?高分送上! 请教语音卡高手:并线录音和串线录音有何不同?电压驱动和话音驱动有什么不同? 一个时钟周期是多长时间? 请问各位谁做过(正在做)用MODEM来录电话语音的?进来打个招呼,探讨探讨。 有人用过CIPAddressCtrl这个控件吗?怎么用?为什么MSDN上说它有一个GetAddress的方法,但我在使用中却找不到这个方法? 请问广东省的高程成绩在哪儿查询,怎样才可以查询到呀???? 运行时的这个异常提示,什么意思?如何解决 关于数据库的一个问题 tmd.江西的软考办的人吃虱去了。 各位大哥:如果在使用的时候,字体变大,是什么原因?有什么办法跟踪吗? 救命啊。。。。。。。高手该出手拉。。 可不可以在一个树控件中的一个节点下面再加另外一个结控件?怎么搞? a question about form evaluation about form evaluation 她现在就睡在我的身边,她长的很丑,大脑袋,小眼睛、身子特长腿特短,简直是一无是处,还让我守护着她睡觉,TMD我比死了还难受,好痛苦啊。。。。。。 在excel2000中,如何在单元格中画对角线(就是常见的表头)? 如何使win98登录WIN2K server中? 各位大哥,请问怎样汉化C++Builder中的英文提示框(祥见内容部分)?谢谢! 请问怎么在sqlserver的用户子定义中是用循环啊! 真奇怪,我只是想通过accept得到的sockaddr_in来得到的IP再用gethostbyaddr得到主机名,但是死循环,请我看看错在哪里?我给分的 quickrep建立的报表,一对多表如何设置,为什么我设置报表的dataset属性为从表时,预览出现主表数据无法显示出现unkown错误,而从表可以。 怎样让“星际”通过代理服务器上网? oracle优化 请懂的英语的朋友告诉我下!the,这个词,到底用在哪里?本人知道这个是一个连接词语,但是不明白到底是要用在那种句子里呢?请说明详细一点, 什么是无线温度传感器? 生物柴油的热值生物柴油一般热值是多少左右啊 我知道原料不同 热值肯定不同 想清楚个大概是多少 试用节点电压法求图中所示电路中的电压 我正用proteus仿真个温度控制器,测量温度范围在20到400度之间,用哪个温度传感器好一点?原本用的是18b20 但发现范围不够·······最好能一起说下这个原件的使用注意事项 如何判断燃料热值高 利用网孔电流法求图3-56所示电路中的电流I和电压U.5,U=6.5 电压是形成电流的原因,那么电路俩端有电压,电路中就必有电流吗? 写一篇幻想月球的作文 关于月亮的想象作文关于月亮形状 要在一段电路总产生电流 它的两段就要有什么 可见什么是使电路中形成电流的原因 什么似提供电压的装置. 关于月亮的600字幻想作文! 基于Labview的虚拟热电阻温度测试仪的设计 为什么电路有电压才能产生电流? 《月亮的幻想》作文怎么写? 设计一个热电偶温度传感器要进行结构设计 有电气图机械结构 机械组装图 外文翻译(不少于500字) 技术参数 关于电压,下列说法中错误的是【 】 A 电压是电路中形成电流的原因 B 只要电路两端有电压,关于电压,下列说法中错误的是【 】A 电压是电路中形成电流的原因B 只要电路两端有电压,电路中就 我要一篇关于天或月亮的幻想文章 甲苯与氯气的反应产物,在光照下的产物与在铁或三氯化铁催化下的产物, 英语翻译产品1:Coconut limerelaxing body mistlngredients:water(Aqua),Alcohol Denat,sodium citrate,citric Acid,DMDM HydantoinpEG--40 Hydrogenated castor oil,perfume (parfum)产品2:Fruit Smoothies Enioy some time topamper yourself withlavish bu 生物柴油热值提高剂哪一种比较好? 甲苯与氯气反应生成物?在甲苯上氯气取代的位置是邻位还是对位? 英语翻译today I miss my home very much I do not know where to go ,what to do after come here because want tell myself happy everyday .beleve myself you can 电路中电压源与点电流源的怎么转换? 甲苯在铁粉存在下与氯气反应,生成什么? 在催化剂FeCl3的作用下,苯和氯气反应 FECL3是如何催化的 为什么能够反应成立 中国海洋文化与西方海洋文化比较. 懂英语的朋友,来帮我个忙~(1)Aa Hh Jj Kk(2)Bb Cc Dd Ee Gg Pp Tt Vv(3)Li Yy(4)Ll Ff Mm Nn Ss Xx Zz(5)Uu Qq Ww每一行的单词都一个相同点,什么相同点啊? 苯与氯气(催化剂,氯化铁)反应化学方程式《氯苯》求大神帮助 介绍一下大河文明和海洋文明的区别 氯气与苯反应,铁做催化剂,生成什么?方程式如何写? 有关月亮的想象作文 列举出五个海洋文明来 苯为什么可以和氯气发生加成反应化学方程式写个,我记得好像只有取代的阿 月亮的想象作文不少于六百字! 法国属于大陆文明还是海洋文明? 求温度传感器,要求测量0到100度范围,输出为0到5V的模拟量! 有关月亮的幻想作文,急用!要有优美语句 寻找一个关于海洋文明的纪录片该记录片以前看过一小部分 但是现在忘了 记得第一集是讲述俄罗斯抢夺北冰洋的海洋权利 弄了个金属国旗插入了 北极点的深海的岩石中 ,这级的最后讲的是 苯与氯气发生加成反应 要在一段电路中产生电流,它的两端就要有电压.为什么两端都要有电压呢? 如何用压力传感器测液位?压力与液位值如何计算?例如:1~200cm的容器,对应的1~20000pa是怎么算出来的? 测0到100度温度范围内的温度传感器,给个具体的电路图和相关原理解释 电路两端只要有电压就一定有电流吗?说说理由. 传感器的种类及应用 空调温度传感器型号怎么确定?本人碰到一台日立空调kfr-25gw,制热时运转几分钟后,内外机都停,怀疑是管温头故障引起整机保护,并且在极低的室温下能开机制冷怀疑室温传感器也有问题,请问 用结点电压法求图中所示电路的节点电压,步骤稍微详细点,谢谢了 要使电路中有电流,电路两端必须有电压么?这个问题我上网也找不到准确的,最好给我讲一讲,举例子什么的,一些以后要学到的东西就不要提了,就在八年级上和七年级的知识范围给我讲就可以 懂英文的朋友来啊Gorigcheat 这是英文名吗? 好听吗?什么意思? 甲苯与氯气反应,在不同条件下有不同的产物,写出在下列条件下的化学方程式(均写一卤代物,甲基间位上的氢原子难取代).用FeCI3做催化剂:能否用图片发过来,我有分加。 有没有数字量输出的温度传感器?我现在想设定一个温度值,当达到该温度时,plc就能接通控制电机转动,有没有这样的传感器,如果没有,用什么办法能实现这样的功能呢?光照传感器呢(判断白天 空调的温度传感器在什么地方 氯气与甲苯光照的方程式 数字温度传感器型号,我想用51单片机采集室内温度,请问我要使用哪个型号的数字温度传感器 懂英文的朋友帮我看看!我想知道这是哪里到哪里的运単!重量是多少!谢谢! 如何用甲苯和氯气为主要原料制取甲醛的化学方程式 数字是温度传感器的型号有哪些?有没有直接输出数字信号的?麻烦建议一下, 关于“月球”的想象作文 T型热电偶的温度范围是多少,为何冷热冲击常用它用为温度传感器? 生物柴油如何测定它的热值?氧弹测量需要什么仪器?热值和十六烷值有关联吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn