回 帖 发 新 帖 刷新版面

主题:[讨论]急急急!linklist *p与linklist p的不同

数据结构链表中函数调用时形参为linklist *p与linklist &p,还有linklist p什么不同?请高手多指教一下,结构体定义如下:
typedef struct lnode
{int data;
 struct lnode * next;
}lnode,*linklist;

回复列表 (共4个回复)

沙发

急急急,不懂

板凳

首先建议你在struict中不要写typedef, 就像你从来不会写出 typedef class 一样。
似乎这么写很cool, 但是在申请该类型空间的时候会隐藏很重要的信息, 比如:

//你的struct
typedef struct lnode
{int data;
 struct lnode * next;
}lnode,*linklist;

//现在要申请此类型的somethings
londe a;

申请完了, 发现什么不同了么? 没有? 不急, 来看我们常写的类(如果你还没学类,别担心,类和结构体很大部分是相同的东西)

class fuck_me { //这句是俚语,就是 我真笨 的意思
//...
};
//申请
fuck_me yeah;

既然已经有了TEG了还要再用typename隐藏, 可以肯定这是国人写的书


现在解答你的问题, *是指针,一个4字节的东西(如果你的机子是32的);&就是引用, 不占任何空间,就是一个别称而已; 直接申请就相当于申请了一个你定义的结构体。

dong啦?

3 楼

typedef struct lnode
{int data;
 struct lnode * next;
}lnode,*linklist;
 
用lnode或者linklist定义变量时,你把变量替换到lnode或者linklist的位置就清楚了。

比如 linklist tLinkList; 相当于
typedef struct lnode
{int data;
 struct lnode * next;
}lnode,*tLinkList;

4 楼

我想你在学C是不?
typdef要慎用,毕竟你现在是在面相过程不是面向对象,隐藏细节并没有好处。
*是将变量声明为指向某一类型数据的指针
&是对与指针使用的,得到指针所指向的地址的那个类型的数据。和你声明 int a后使用a的效果一样 

如果你是在学C++,根本就没有必要这样做啊,用对象封装数据,从而得到一个类型,把那个类型当做内部类型用就可以了(虽然不全相同)
*还是指针
&是引用了,什么是引用呢?就是在内存中,它代表的是相同的地址和数据。声明一个引用就是  int &a,注意哦,这时候a只是一个引用,它不能够存入任何数据,就像你不能够给指针赋值,而应该搭配&后使用一样。但是你可以让它引用另外一个数据。用哪个变量给它复制就可以了

好像是这样的,我很久没有用C++了

我来回复

您尚未登录,请登录后再回复。点此登录或注册