关于一个引用的一个小问题

dengfei007 2009-05-18 10:06:22
问题一:
void Genlist::push(Genlistnode &x)//将一个包含值x的元素加入到广义表的最前面
{
if(first->tlink==NULL) first->tlink = x;//其中first是Genlistnode *型的 是个指针类型,tlink也是这种类型的
else
{
x->tlink=first->tlink;
first->tlink=x;
}
}
我的疑问就是:这个push函数的形参是个Genlistnode型的引用,而不是Genlistnode *指针型的引用
所以first->tlink = x; 这个语句复制号左右不是一个类型的啊 左边是指针型的 而右边不是 ,那这句话是书上写错了还是确实可以这么写 为什么?
问题二:
Genlist & Genlist::Addon(Genlist & list,Genlistnode &x)//返回一个以x为头,list为尾的新表
{
Genlist newlist = new Genlist;
newlist.first =copy(list.first);
x->tlink = newlist.first->tlink;
newlist.fist->tlink = x;
return newlist;
}
我的疑问:
Genlist newlist = new Genlist;这句话不是申请一个动态空间吗 我感觉这么写才对:Genlist *newlist = new Genlist;
其中newlist应该是一个Genlist *指针型的 所以后面都要相应变化
newlist.fist->tlink = x;这句里面和第一个问题一样tlink是一个指针 而x只是Genlistnode类型的一个引用

就这两个问题 麻烦各位了
...全文
169 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
passionboy03 2009-05-19
  • 打赏
  • 举报
回复
第一个问题:类的名称就是开头地址
第二个问题:是应该这样Genlist *newlist = new Genlist;

[Quote=引用楼主 dengfei007 的帖子:]
问题一:
void Genlist::push(Genlistnode &x)//将一个包含值x的元素加入到广义表的最前面
{
if(first->tlink==NULL) first->tlink = x;//其中first是Genlistnode *型的 是个指针类型,tlink也是这种类型的
else
{
x->tlink=first->tlink;
first->tlink=x;
}
}
我的疑问就是:这个push函数的形参是个Genlistnode型的引用,而不是Genlistnode *指针型的引用
所以first->tlink = x; 这个语句复制号左右不是一…
[/Quote]
maosher 2009-05-18
  • 打赏
  • 举报
回复
first->tlink = x

看下这个类成员的赋值函数是怎么重载的
papaofdoudou 2009-05-18
  • 打赏
  • 举报
回复
13楼此言差矣,即使被typedef了,仍然不行,你没看到两边的形式都是一样的吗,Genlist newlist = new Genlist;总是差一个星号的。
楼主别研究了,语法就是这样的,你的理解没有错误
dengfei007 2009-05-18
  • 打赏
  • 举报
回复
别帮顶啊 能解释下不??困惑中
  • 打赏
  • 举报
回复
第二个问题忘了说了……
Genlist newlist = new Genlist; //如果 Genlist 的 typedef 定义是指针,这个语句就是对的
  • 打赏
  • 举报
回复
给你顶一顶,呵呵~~~~~~
  • 打赏
  • 举报
回复
问题一:感觉应该 Genlistnode 已经被 typedef 为指针了吧,对于这个问题,应该去看看 Genlistnode 的
typedef 是怎么定义的

问题二:怎么觉得这个问题跟前面的差不多啊,这个也要看 Genlist 的 typedef ……
楼主再仔细看下,一般书上应该不会犯这样的错误的
wwoo_1105 2009-05-18
  • 打赏
  • 举报
回复
对的
liliangbao 2009-05-18
  • 打赏
  • 举报
回复
帮顶~
ericming200409 2009-05-18
  • 打赏
  • 举报
回复
书是权威的书,但是你说的一点都没错,
papaofdoudou 2009-05-18
  • 打赏
  • 举报
回复
数据结构上面的代码好像都不是拿来运行的,只让意会,不可编译,我看的数据结构方面的书都是伪码
dengfei007 2009-05-18
  • 打赏
  • 举报
回复
我看的是清华大学殷人昆写的数据结构(黄皮书),人家都说好啊。。
dengfei007 2009-05-18
  • 打赏
  • 举报
回复
那我补充下类的定义吧(只写私有数据成员了)
广义表存储结构的实现
#include <iostream>
using namespace std;
#define HEAD 0
#define INTGR 1
#define CH 2
#define LST 3
class Genlist;
class Genlistnode//广义表结点类定义
{
friend class Genlist;
private:
int utype;//=0,1,2,3,表示HEAD,INTGR,CH,LST
Genlistnode *tlink;//指向同一层下一个结点的指针
union
{
int ref;
int intgrinfo;
char charinfo;
Genlistnode * hlink;//存放指向子表的指针
}value;
public:
};
class Genlist//广义表类定义
{
private:
Genlistnode * first;//广义表头指针

public:
};
papaofdoudou 2009-05-18
  • 打赏
  • 举报
回复
无论如何,写这样的代码:
Genlist newlist = new Genlist;
是永远不对的吧,找本好书看看
Sou2012 2009-05-18
  • 打赏
  • 举报
回复
LZ的语言不太规范?我是说术语
adventurelw 2009-05-18
  • 打赏
  • 举报
回复
应该说,如果描述没有问题的话,你的观点是正确的
但因为并没有类的定义来判断,所以也没法给出什么意见。
papaofdoudou 2009-05-18
  • 打赏
  • 举报
回复
你的理解我感觉很合理,什么书?不行扔了算了。
看看有没有什么typedef定义之类的 ,或许有些类型定义了别名

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧