主题:[讨论]急急急!linklist *p与linklist p的不同
song1
[专家分:0] 发布于 2009-01-19 15:03:00
数据结构链表中函数调用时形参为linklist *p与linklist &p,还有linklist p什么不同?请高手多指教一下,结构体定义如下:
typedef struct lnode
{int data;
struct lnode * next;
}lnode,*linklist;
最后更新于:2009-01-19 22:04:00
回复列表 (共4个回复)
沙发
mayutao [专家分:0] 发布于 2009-01-19 15:46:00
急急急,不懂
板凳
abc123!!! [专家分:1080] 发布于 2009-01-27 11:04:00
首先建议你在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 楼
54zhaoying [专家分:0] 发布于 2009-02-01 14:24:00
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 楼
chb871013 [专家分:70] 发布于 2009-02-05 11:33:00
我想你在学C是不?
typdef要慎用,毕竟你现在是在面相过程不是面向对象,隐藏细节并没有好处。
*是将变量声明为指向某一类型数据的指针
&是对与指针使用的,得到指针所指向的地址的那个类型的数据。和你声明 int a后使用a的效果一样
如果你是在学C++,根本就没有必要这样做啊,用对象封装数据,从而得到一个类型,把那个类型当做内部类型用就可以了(虽然不全相同)
*还是指针
&是引用了,什么是引用呢?就是在内存中,它代表的是相同的地址和数据。声明一个引用就是 int &a,注意哦,这时候a只是一个引用,它不能够存入任何数据,就像你不能够给指针赋值,而应该搭配&后使用一样。但是你可以让它引用另外一个数据。用哪个变量给它复制就可以了
好像是这样的,我很久没有用C++了
我来回复