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

一个关于指针关的问题

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

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

哦哦,我知道哪错了= =

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

谢谢大神的帮忙和鼓励
腾讯开放平台推“送红利计划” 承诺半年内不参与分成 JavaEE快速开发框架Wabacus 4.0发布,开发效率提高五倍以上 市盈率创新高 谷歌为什么会在苹果博弈中暂时胜出 从Rovio遇到危机,看现在应用市场的演变 Windows Azure支持Android应用 面向东亚推广云服务 抛弃DRAM、拥抱闪存,Facebook重做Memcached 夏普三星联姻 电子行业或将多元化发展 从下拉菜单设计细节看Amazon对用户体验的把握 Chartboost美女CEO:40人团队服务3亿移动玩家 Distimo:新晋开发者想让产品得到关注越来越难 OpenFeint绝迹后,开源项目OpenKit继续前进 美FDA通过搜索引擎和社交平台预警药品副作用 挖坟三星“眼球追踪技术”背后的技术团队 为什么开发者热衷在Stack Overflow上查阅API文档? Facebook推新News Feed 欲造就“个性化报纸” 女神程序员的一天:暴力测试social爬虫代码 2013IBM云存储路线图:更快,更简单,更安全 二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? Buffer创始人谈开发:先验证,后编程! 谷歌可穿戴式产品再度来袭:会说话的鞋子 未来Chrome OS或取得Android般成功 云落地@北京,北京市北斗公共平台或开放API? GitHub再遭攻击 主要服务中断约一小时 如何查询出所有用户表名 PWS中的一个小问题 请问DataSet里的Relations和Constraints有什么区别? 想了三天,还是做不出 请问如何创建一个大于屏幕分辨率的窗口? 公开putao的最大秘密,他女友的隐私! 关于不同版本的用户对象的问题!(online) 在批处理中设置路径,有空格系统不认怎么办? 为了忘却的纪念(今天是咱们的国耻日) 关于JSP菜单实现的问题? 如何判断数组是否被赋值? 用MSCHART的二维折线图如何实现左右坐标分别标识不同的曲线? 请问招行的网上银行的在网上点击安装是怎么实现的呀? 100分只是开始。。。 如果回答继续加!! 一个template问题,想不出办法,高手请进 送分题:如何改变dll的调试可执行文件? 大家看看代码 真搞不懂为什么出错??? 如何在表单中设置包含字段http://schemas.microsoft.com/cdo/workflow/response 如何使用VBSCRIPT读取本页文本框中的数据, (不能用表单提交和JAVASCRIPT 能不能?) 我在桌面上执行一个应用程序,运行正常,但用pb中调用run("***.exe")运行是出错,提示是少了某些dll文件 我怎么才能使客户端发过来的经UF8编码的中文URL,还原成GD312,能找到页面? 我用openwithparm(w_1,arg),arg明明传递的是LONG型的数据,为什么用message.longparm接收到的是0,而一定要用message.doubleparm才能正确 问一个sql语句如何写,简单! 征集能够同时输出文本和图形的控件! 急寻bmp转gif的代码 封装在Dll中的窗口焦点问题 为什么我用JBUILDER编译JSP文件,用web run执行后会出现这些情况?? 有谁用过CMPPE2.0协议开发过网关程序的请进 win2000下内存使用的问题? 我每次都结贴子的,不信你们查一下啊,这次再请帮忙,谢谢哦 在公共文件夹如公告窗体的原件与回复件是如何关联的? delphi中form中放了一副图,怎样让图可见而form不可见? 一个关于vba的应用问题?合并文档 英文版的vb中该如何来把一个项目进行打包呢(想把它安装到一台没有装vb 的电脑上) 删除多余的重复记录 如何获取屏幕尺寸? 有人用过EasyPack的仿真器吗? 关于QuickRpt报表存盘后出现乱码的问题。 邮件监测器要怎么写?? 关于Web Browser控件 如何加快蓝点linux的安装速度 access 表中的datetime型字段在delphi中如何使用? 《windows 网络编程技术》是哪个出版社的 小弟正学socket编程,有个问题请教! 微软专家请看: Sybase数据库中的中文存储问题! 连接池在TOMCAT中不可用吗?我是新人。 简单的问题? SOS!!!!!!!!高分赠送!!请教大虾们一个有关MSSQL一个问题!! 我在VB.NET下调用弹出对话框,可是无论click确定还是取消,结果都一样,我写的有什么错误吗? 紧急寻找?????????高分求助 作文:“那一次,我真羞愧” 关于见义勇为的名言名句 作文(那一次我流泪了)在400字左右,急.明天就要交了. 当入射光线与镜面的夹角为40度是,反射光线与入射光线的夹角为多少度? 一路有你陪伴的800字高中作文 怎么写关于写自己优点和缺点的作文400字!明天要交了! 当入射光线与镜面的夹角为40度时,反射光线与入射光线的夹角为 一只箱子里装有白皮球、红皮球和花皮球共69只,白皮球比红皮球多12只,花皮球比红皮少6只,三种皮球各多少只 在比例尺是1:4000的地图上,量得一块长方形地的长是4厘米,宽是2.5厘米.这块长方形 09年国庆阅兵式作文450字的哦!速度哦,好的我追加5分.09年的.跪求 孔子的思想是封建思想吗?孔子的儒家思想在我国是很有名的`而且是受大众所拥护` 但是为什么历史上比如太平天国的起义人民所到之处都要捣毁孔子的寺庙?既然是封建思想为什么又这么受 在比例尺是1:4000的地图上,量得一块长方形地的长是4厘米,宽是2.5厘米.这块长方形地的实际周长是()米,实际面积是()公顷. 2009年国庆阅兵式作文500字以上哦 为什么梁启超反对封建思想却推崇孔子? 在比例尺为1:4000的地图上,量得一个长方形长是4厘米,宽是2.5厘米.这长方形的实际周长是多少米?它的实际面积是多少公顷? 2009国庆阅兵式作文500字 新文化运动反对封建思想,为什么要把矛头指向以孔子为首的儒家传统道德? 如图,平面镜A与B(看成一条直线),光线由水平方向射来,传播线路为a—b—c,当a⊥b,b⊥c,∠1=∠3=45°,你知道平面镜A与B之间的位置关系吗?纯属数学题,图片暂时没有呃,你懂得. 09国庆作文关于阅兵式的急速度!1 幼儿园有红皮球60只,比花皮球的3倍多6只,花皮球比白皮球少6只.白皮球有多少只? 如图,平面镜A与B互相平行,光线由水平方向射来,传播线路为a→b→c,当a⊥,b⊥c,∠1=30°时,求平面镜B求平面镜B度数 模仿开国大典写一篇场景(校运会、09阅兵式……)是写作文!350最佳! 白皮球每个a元,花皮球每个8元,买b个花皮球和5个白皮球共要()元 作文材料 记住这一天 仿照《开国大典》写一篇作文怎么写? 写阅兵式的作文300字,急!急!最底也有110分! 一个圆形花坛的直径是8m,在花坛周围摆放盆花,每隔1,57m放一盆,一共可以放几盆花? 课文开国大典阅兵式简介 一束光线与地面 40度角,现用一平面镜改变其光路,使反射光沿竖直方向射出去,求放置的镜面与地面的夹角 一个圆形花坛的直径是8m,在花坛的周围放盆花,每隔1.57m放一盆,一共可以放几盆花 以为题的作文,600字!要议论文! 靠墙边围成一个平行四边形花坛,围花坛的篱笆长99米,求这个花坛的面积.如图: 描写春天景色的200~300字作文 一束平行光线被平面镜反射.现要使反射光线由原来的方向偏转20度角,可以采用的方法是什么?请画图, 观阅兵式有感作文200—300字注:字数不可以超过300字如果符合要求我再加分 一个圆形花坛直径是8m,在花坛周围摆放盆花,每隔1.57m放一盆,一共可以放几盆花 一束平行光线与水平面成20度角射向地面,先用平面镜使反射光线进入一竖井中,镜面与水平方向成的角应为? 十万火急!阅兵式作文300到500字左右 一束光线垂直射到平面镜上 然后将平面镜转动A 入射光线保持不变 那么反射光线的方向将改变?02AAA/2 寒假假期作文400字,5篇 阅兵式作文(赞叹的写法)300字要用赞叹的情感写 速度 200~300字 一个圆形花园直径是10米,在花坛周围每隔1.57米摆一盆花,共可摆几盆花? 开心或伤心的一件事作文500字,最好多打几篇作文. 换个角度看成长作文,800字, 故宫建筑反映了中国古代建筑哪些优点? 作文:那一次,我很————(伤心,快乐,感动……)600字,半个小时后,我就要, 红皮球比白皮球多13个,花皮球比红皮球多20个.花皮球的个数正好是白皮球的2倍.求一共的皮球 一个圆形花坛的周长是125.6米这个花坛的直径是多少?此页面是否是列表页或首页?未找到合适正文内容. 这一次,我很——(开心、伤心、难过、幸福、惭愧)的作文开头,100字 在桌面上放一块平面镜,用激光笔. 一块长方形菜地的平面图的比例尺是1:500,这这块菜地图上面积与实际面积的比是多少 作文《那一次我很快乐>>我急时需要,200字 激光笔发出的光能射到墙壁上是什么原因轻轻搞起桌面式光亮点会随着颤动.这说明了什么? 一个圆形花坛的周长是125.6m,这个花坛直径是多少? 身边的事使你高兴、愉快,有的事使你难过、惭愧等 作文200字左右.截止到明日下午1点30左右. 白皮球有20个,比黑皮球个数的2倍少4个,黑皮球有多少个? 篮球的单价比足球贵3元李老师带去300元无论买哪一种球钱正好用完如果买足球可比买篮球多买5个那么买足球可买多少个 作文 :那次我真什么(后悔,开心,高兴,伤心,惭愧,难过等等)跪求.500字左右 有两箱皮球,第一箱中的2/5是白球,其余是红皮球,总数比第二箱多15个;第二箱全装白皮球.两箱中的白皮球共69个,红皮球有多少个?我要算式 春游的作文100字要写周记!麻烦.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘