| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13166 人关注过本帖, 10 人收藏
标题:[原创]数据结构与算法基本程序合集
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

真的啊.
老师你的意思是说sizeof(node)==sizeof(node*)
是这样的吗?


倚天照海花无数,流水高山心自知。
2007-10-27 16:29
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
以下是引用nuciewth在2007-10-27 16:29:22的发言:

真的啊.
老师你的意思是说sizeof(node)==sizeof(node*)
是这样的吗?

你还不理解我的意思。。。是前面那个不用加*号,如果它已经是指针类型。。。汗那。。。


努力成为菜鸟!
2007-10-27 16:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
我这个学生很难教吧.
老师

倚天照海花无数,流水高山心自知。
2007-10-27 16:39
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
再跟老师说一遍.
我不是不懂用指针就可以.
我只是不懂,为什么这个申请空间的语句中前后都用L.

倚天照海花无数,流水高山心自知。
2007-10-27 16:42
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
呵呵,没事,讨论一下也好,版主你还是很有水平和见解的。我再仔细说一下吧。你看看想下呵。

首先我有如下定义:
#define NULL 0 /*宏定义*/
typedef struct node /*定义结点类型的数据结构*/
{
char c; /*数据域,类型为字符型*/
struct node *next; /*指针域,类型为本结构体类型*/
}*L; /*类型重定义,即Node和*L和struct node等价*/

注意最后一句注释,此时Node和*L和struct node等价

然后我用上面的链表结点定义指针:
L l,p,q; /*用指针类型定义三个结点类型的指针*/

这个时候L和*node是等价的对吗?

由于l是指针,在C中没有分配到内存,所以我要给它分配空间,即
l=(L)malloc(sizeof(L)); /*分配内存空间*/

这句话和
1、l=(node*)malloc(sizeof(L));
2、l=(node*)malloc(sizeof(node));
3、l=(L)malloc(sizeof(node));

都是等价的。

至于为什么我都用L而不用node,是因为在这类程序中,使用指针比较灵活,通常定义一个指针而不是直拉用实类型node。


这下应该明白了吧?

再不明白的话就建议你再复习下数据结构的教材了呵。

努力成为菜鸟!
2007-10-27 17:14
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
l=(L)malloc(sizeof(L)); /*分配内存空间*/

这句话和
1、l=(node*)malloc(sizeof(L));
2、l=(node*)malloc(sizeof(node));
3、l=(L)malloc(sizeof(node));
-----------------------------------------------------
我和nuciewth有一样的疑问啊
为什么第二个L就换成node了?
应该也是node*啊

l=(L)malloc(sizeof(L));应该等价于l=(node*)malloc(sizeof(node*));这个吧?
如果是这样,岂不是有问题吗?

[此贴子已经被作者于2007-10-27 18:00:37编辑过]


[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-10-27 18:00
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
我也有这样的问题:l=(L)malloc(sizeof(L))。
既然L为指针,那么指针变量的sizeof值与指针所指的对象(结构体)没有任何关系,所有的指针变量所占内存大小相等。
比如以下例子
typedef struct node
{
char c;
struct node *next;
}*L;
char* pc ="abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)(); // 函数指针
sizeof( pc ); // 结果为4
sizeof( pi ); // 结果为4
sizeof( ps ); // 结果为4
sizeof( ppc );// 结果为4
sizeof( pf ); // 结果为4
sizeof( L ); // 结果为4

英者自知,雄者自胜
2007-10-27 18:48
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
哈哈,如果有人和我有相同的意见.
我还是想说那句话,老师,我并不是不知道
L等价node*
按道理也 应该是这样写p=(L)malloc(sizeof(node))//后面是结点空间,而不是指针空间.
老师,我说对不对.

倚天照海花无数,流水高山心自知。
2007-10-27 19:24
cobby
Rank: 1
等 级:新手上路
威 望:1
帖 子:565
专家分:0
注 册:2007-7-11
收藏
得分:0 
静思的实验已经给出结果了。我再说明一下,大家看看是不是这样的。

l=(L)malloc(sizeof(L));

第一个参数(L)是类型,第二个参数(L)是大小,两个参数的意义和作用是不一样的。
当第一个参数为实类型时,如node,则需要用node*,而当第一个参数是指针类型时,如L,则不需要*,直接写L。对于这一点大家都没意见。

现在大家的问题在第二个参数上。第二个参数的作用是确定待分配内存空间的大小,仅此而已,和类型没有任何关系。如果你预先知道需要分配的空间大小(如4),你甚至可以直接写sizeof(4),所以后面的参数即可以用L,也可以用node,但不是node*,因为这个表示没有意义。


最后说明,如果大家还是有疑问,请把我的程序复制到VC++或者其它编译器中运行,你们可以试着把l=(L)malloc(sizeof(L))用我给出的四种不同形式替换,看看结果有没有问题。

对于这个问题我本人的讨论到此。

努力成为菜鸟!
2007-10-27 20:57
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

我再也不发表任何意见了.
就这样吧.不讨论了.


倚天照海花无数,流水高山心自知。
2007-10-27 21:17
快速回复:[原创]数据结构与算法基本程序合集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015885 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved