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

一个关于指针关的问题

编辑:说三道四文库 发布时间:2017-09-25 07:18
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如何用VB在桌面建立快捷方式 VB如何在 VB 中控制 Modem 行为? VB如何在VB中判断Windows9x的运行模式 VB如何在Visual Basic中实现异步执行程序 VB如何在开机时自动更换墙纸? 使回车具有 Tab 的功能-VB资料 输入时,自动转换成小写? -VB资料 显示多媒体信息 -VB资料 也谈Windows 下的自动存盘 -VB资料 一个小巧精致的CPU监视器 -VB资料 应用VB4.0实现工业控制的实时曲线和历史曲线 应用程序中实现关机功能-VB资料 萤幕抓取与萤幕保护程式 -VB资料 用VB5.0创建Windows快捷方式 用VB5.0收集键盘和鼠标信息 用VBA限制非注册软件使用时间 用VB编程检测当前电池使用情况 用VB编写定时关闭计算机的程序 用VB编写键盘拦截程序 用VB函数轻松访问系统注册表 用VB设计一个定时闹钟程序 用VB实现拖放功能 在VB中启动控制面板 在VB中异步执行程序 在Visual Basic中终止Windows 95 在关机或Logff前信息的拦截-VB资料 VB怎样捕捉窗体的鼠标? VB怎样存取注册表信息 VB怎样改变双击鼠标的时间间隔? VB怎样关闭一个正在运行的程序 VB怎样限制鼠标移动 大家帮帮忙! 请问高手,在用MDI和数据库相连后,怎么样把自动生成的Form当成Page? 如何利用单片机取得电话来电号码? 如何插入名次字段数据? 如何插入名次字段数据? 在远程计算机上执行一个应用程序时,该程序用的是我的资源还是对方的? 用Borland C++ Builder 开发企业管理系统 又出现错误了????? 求助!!如何在StringGrid中显示ADOconnection中的数据?? 为了运行XML,服务器究竟要怎么样才行? directx屏幕捕获,为什么我的这段代码不行 小问题,大侠帮忙,小弟不胜感激!!!!! 我想使用一个字段来存储2万字左右的文章应该用什么类型(text不够用的)? 向非窗口类的对象发送消息呢? 如何重新检索 救急:Win me开始菜单及Taskbar的小图标都变花了,如何解决?up有分 ############狂送分,附带一个小问题########### 在bc中怎样创建资源文件?? 请高手进入,急!在线等待 生活有你 更新后台數據,用試圖就可以,用代碼就不行? ★★★CFormView的大小,高手没必要进,低手就可以解决了! 不超过十行,但.....(C) 打到雍亲王 "准女朋友的胸太平了,我该如何取舍? " 准备结贴了,要顶的赶快顶呀,去晚了就没机会了 为什么我从数据采集仪采集到的数据是乱码? 请教:动态的下拉菜单怎样做?在线等待,答对就给分! 有谁知道用vb如何把bmp的文件转换为jpg格式?? sql server2000是不是不能在winxp 专业版下安装?? 请问大家 wait函数的使用问题(给100) 关于wait函数的使用问题(给100) 如何在xp下能够删除带子目录的文件夹? [求助]关于考试座位号随机分配问题! 无奈的我等你的帮助! 在delphi中如何建立一个doc文件? 有谁可以帮帮忙(在线等待) 请问大家如何防止DEDE的,我发现许多软件没有进行压缩也无法进行DEDE反编译,通常只能进行到一半 现代制造业企业管理系统的开发 (C++ builder) 线程设计,帮帮忙!!! 关于flash中的actionscript 如何做自动评分的考试系统?给点建议或意见! 告急!!!主从表的问题,怎样修改从表时,让主表的数据跟着变化? 刚刚在新闻组看到的东西, 让大家乐乐(转贴) 关于ASP.NET的讨论,欢迎大家指正. 再发:请教在Rave 报表中如何在每一页上都显示打印表头 关于视图的问题!!!很急,各位大哥帮帮忙!! CrystalReports(水晶报表)的版权问题 请看此贴!帮忙阿! 菜鸟问题,请问怎么让 点主from上的一个按钮就弹出另一个编好的窗体 请问能不能将网页页面内容保存为word文档输出?? 当今社会学雷锋是内容重于形式还是形式重于内容? 通信原理与通信技术第二版中的 低通抽样定理中有一个带限模拟信号.请问什么是带限模拟信号?谢谢 改错(一共有四处错误,把改完的句子写出来)一轮明亮的圆月挂在空中,元宵佳节马上终于来到了,到处都是喜气洋洋的.马路边,张小冬和刘文斌由他的爸爸带着,拉着兔子灯跑来跑去,表情多么 道教名山都有哪些 模拟信号抽样后,模拟频率,数字频率的问题就是那个模拟频率和数字频率的问题.假如有个模拟正弦波sin wt .我把他抽样,抽样频率为1HZ,那么变成数字域后,数字频率是个什么东西?是多少?好像变 20世纪中国第二次历史巨变指的是 道教名山有哪些? 抽样后的模拟信号包含哪些频率成分 改错改句子中的错误1.I went to fish on Sunday.()2.They leaved HangZhou last week.()3.He often flys a kite in spring ()4.Look!A car is runing to us.()5.She has supper at 6 yesterday.() 有没有什么感人的倡导捐款的文章或者语句比方看到了灾区的小孩子很可怜,再想到现在自己很安逸的坐在电脑面前...感触颇深的句子 动摩擦因数,物体静止时,接触面之间有无动摩擦因数 单句改错.每句存在一处错误,请按改错格式改1 The scientist devoted his spare time todo experime2 The teacher told the students not be late3 English is an useful tool4 Why not to follw his advice?5 What a fun it is to swim in the lake! 完成句子:非常感激您捐款给慈善机构.非常感激您捐款给慈善机构.Your donation to charity ___ greatly ___. 若物体跟接触面之间的动摩擦因数为u,压力为Fn...若物体跟接触面之间的动摩擦因数为u,压力为Fn,物体相对接触面滑动时,物体受到的滑动摩擦力大小是( )A.0B.uFnC.Fn/uD.u/Fn 请改错短句语法错误Since smoking is harmful to one's own and other people as well,the government is making active use of law,forbiding people to smoke in public.A ban on smoking in public places will be publish at January,2011.A controversial 有什么捐款给四川地震的人民的发动起捐款的句~发哥的,肥料的 命题“对于任意m∈R,m命题“对于任意m∈R,m 电动汽车为什么不用两个电池?A电池驱动汽车行驶.在四个车轮上各加装一个发电机汽车启动行驶中A电池首先参与提供电能驱动车轮转动.当车速达到50公里每小时时四个安装在车轮轴上的发电 有一个成语不会啊( )苦( )乐 成语 x^2+mx-12=(x+6)(x+n) m=? 暑假里的一件有意义的事. ()然若揭 ()然冰释 ()然失笑 抽样定理是什么? 怎么加YY好友号啊 他们说我听不懂 老班长瘦了扩句 什么动物爱挂在墙上 有意义的活动,最好是家务 过草地时,老班长让小战士们喝鲜鱼汤,自己嚼吃剩下的鱼骨头.鱼骨头又硬又扎,真是(咽 用咽字组词 弱种子也要发芽阅读答案 暑假里一件有意义的事可以写些什么,新一些 金色的鱼钩缩写,重点写老班长吃鱼骨头部分300字或300以内 什么动物最爱滑倒? 支原体、衣原体检查前要注意什么由于前段时间咽喉发炎服用了几天的抗生素(加替沙星和罗红霉素),请问如果做支原体和衣原体的检查前需要停药多长时间才能保证结果无误? 求助数字信号处理基础问题——抽样定理应用有一调幅信号 Xa(t)=[1+cos(2*pi*100t)]cos(2*pi*600)用DFT做频谱分析,要求能分辨Xa(t)的所有频率分量,问(1)抽样频率应为多少赫兹?(2)抽样时间间隔应为多少 弱种子也要发芽阅读中的农民为什么要做出既夸张又慈爱的姿势 询问支原体衣原体检查注意事项 患者性别:男 患者年龄:31 我前段时间有不洁性生活,尿道口红肿,10月1日开始吃了6天的左克和克拉霉素和14天的闭癃舒片,15号停药.过7天后做了支原体衣原体检 显微镜的物镜焦距什么意思? 请问什么动物可以挂在墙上?动动脑筋哦! 想去北欧挪威旅游呢,可是不会挪威语,又不想跟团,那里英语通用吗? 1.老班长的病也不轻,成天就吃点我们吃剩的鱼骨头和草根,再不好好休息会支持不住的.改成反问句2.小林,把掉在地上的书捡起来.改成祈使句 《弱种子也要发芽》主题 最近有什么好听的外文歌,不一定是英语的,其他语言也可以最好是慢歌 ,不要日韩歌曲, 老班长到处找野菜,挖草根,可是光吃这些东西怎么行呢修辞手法 好处 什么动物能挂在墙上?要和我想的一样哟 海底生物的异常行为 学雷锋做好事50字,要具体情况 信号与系统 卷积和抽样定理有什么区别和联系一直搞不清卷积的概念,好像也是把信号用冲激信号分成一些脉冲柱然后加起来,那不是和抽样定理差不多吗?请学得好的人来说说, 弱种子也要发芽告诉我们什么 好听又好唱的青春励志歌曲 两物体间的动摩擦因素与两物体间的接触面积有关吗?谢了! 弱种子也要发芽(2011丽水) 要求建立标准的访问控制列表,10.1.10.0 的网络不允许访问10.1.50.0的网,请写出防空列表以及在那个口配置 动摩擦因数与接触面面积为什么与接触面面积无关呀? 动摩擦因数与接触面面积成反比是对是错?请说明 关于“学雷锋”的征文,散文的,诗歌形式的也可以,记叙文也可以,总之要是关于学雷锋,活雷锋什么的当天就要,是自己写的,不要重复别人,各位好好心,帮帮忙,当天就要,急啊!1 为什么动摩擦因数与接触面面积无关 《萌芽》阅读理解答案 青春励志歌曲班级的合唱曲目.青春励志就好.最好是比较流行的.老歌不错,但是我们还是比较流行的更容易接受. 老班长的手又廋又硬.(改为比喻句) π/4=1-1/3+1/5-1/7+一直加到最后一个数的绝对值小于10^-6 有什么错误啊#include#includeint main(){int n;\x05double s,b=1.0,a,sum;sum=0;\x05for(n=2;fabs(b)>=1e-6;n++)\x05{\x05\x05sum=sum+b;\x05\x05a=2*n-1;\x05\x05b=-1/a;\x05}\x05s=sum 北约秘书长否认东欧军演针对俄罗斯大学教会你什么?两大美制军机入驻台湾 下一步军购欲争多伦多市长福特最近麻烦不断芬兰外交部长期遭入侵 媒体乱猜中俄黑苏格兰部长为中国教师要签证 英称将严美媒称“画狗大师”小布什要给政坛老友多伦多市长福特最近麻烦不断美国国务院称在钓鱼岛问题上立场未变外交部:美国不是钓鱼岛争议当事方 应“不稳定之弧”挑战全球反恐 跨界军事博尔特自爆在北京拒吃中餐 吃了100小泉之子等日高官“不动产和储蓄”为零缅甸传奇双胞胎重聚 八岁即建“上帝军斯诺登发公开信谴责美英 吁全球性解决埃及“世纪审判”再被推迟纽约商品交易所黄金期货市场4日上涨叙利亚强调将在战乱期间保障民众医疗条北京中小学禁售碳酸饮料引争议 被指管油价4日上涨美元对主要货币汇率4日下跌17省份城乡医保“并轨”他,第一个提出组建“火箭军”大球贴金以热换凉 给火车“清肺”文艺收尾闭幕式一场狂欢网瘾怎么治 需要专家发声“虐人”解不了虐狗困局朝阳区个人房屋缴税业务四厅通办揭秘燕郊民间反传销组织池中遭黑手阵雨“伺机而动”今夜将抵京北京派30辆急救车和104人赴杭州保有一种感动 就叫“中国女排”英得红利美韩今军演 朝连发谴责再约2020大球贴金女“厨神”亮相将爱情传递有一种感动 就叫“中国女排”
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘