标题:[贴图]有关线形表求助~
只看楼主
fire77
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2005-9-19
得分:0 
回sky,看了你们学校的班级网页?链接打开速度有些慢,没有找到信息呢,不过谢谢你!希望你多多给我回贴,我现在是个数据结构问题儿

2005-10-03 15:41
舞踏祭
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-26
得分:0 
在家上网的吧? 下载过严蔚敏老师的《数据结构》视频录像没? 很不错的 http://www1.manfen.net/bittorrent/0bebbc82df9f49e7c56e077160587d8f.torrent

2005-10-04 02:19
舞踏祭
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-26
得分:0 
以下是引用fire77在2005-10-3 15:38:33的发言: 很高兴看到有人响应啊~听完有的明白了,还有些新的具体的疑问,请看: 问题1:对于L与&L我明白了,谢谢sky!但有个类似的问题 比如 Initlist( sqlist *L) { (*L).elem=(Elemtype*)malloc(LIST_INIT_SIZE*sizeof(Elemtype)); if(!(*L).elem) exit(OVERFLOW); (*L).length=0;.............} 问题:这里的*L又是怎么回事????
sqlist *L 说明L 是指向 sqlist型结构体 的指针; (*L) 说明取L所指向的内容。由于L指向结构体,而结构体名表示结构体的基址,也就是说 得到了结构体的基址。 (*L).elem 即取 L所指向的结构体 的elem域

2005-10-04 02:28
舞踏祭
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-26
得分:0 
指针不过关哦,看来你C语言基础还有待加强。

2005-10-04 02:29
fire77
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2005-9-19
得分:0 
呵呵,现在知道Sqlist *L是指向结构体的指针了。。。。

[此贴子已经被作者于2005-10-8 9:59:40编辑过]



2005-10-04 18:49
舞踏祭
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-26
得分:0 
以下是引用fire77在2005-10-4 18:49:37的发言: 不知道我理解的对不对,当初是不明白为什么有的要用*而有的程序不用它。 上面这个带*的程序是用动态分配的,不带*的是静态的分配,对吗? 这下子问RAIN的问题也知道是什么了。 就是*!!!谢谢所有热心的朋友!
i am sorry to tell you that... you are wrong... 快回去看看C语言的书吧...基础真的很#$@^%&%&*&(^&#@@!$%

2005-10-04 22:48
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
得分:0 

以下是我转我们学校网站上我老师的帖子 看来很多同学对&的用法和含义还不是非常清楚,见下面的例子:

main()

{ int i=3,j=5;

change(i,j);

printf("i1=%d ,%d ",i,j);

}

void change(int n, int m)

{ n=n+m;

printf("n=%d,m= %d ",n,m);

}

运行的结果为:

i1=3,5

n=8, m=5

现把上面的程序改为:

main()

{ int i=3,j=5;

change(&i,j);

printf("i1=%d ,%d ",i,j);

}

void change(int &n, int m)

{ n=n+m;

printf("n=%d,m= %d ",n,m);

}

运行的结果为:

i1=8,5

n=8, m=5

为什么会产生这样的结果?

C语言中的&是取变量地址的操作,在执行

main()

{ int i=3,j=5; 时, 操作系统(os)会对变量i,j分配内存单元,如i的地址是2800,os只管理2800的单元,它并不知变量i,执行i=3;则2800单元中的内容是3,用符号(2800)=3表示,执行调change函数,把i的地址2800传递给n,&n=2800,在执行n+m,则2800单元中的内容变成8,(2800)=8,再退回到main时,执行 printf("i1=%d ,%d ",i,j);则应该把2800单元中的内容输出(注意在os中没有变量的处理,只有对地址的管理),这时2800单元中的内容已变成8,所以输出是i1=8,5。我们注意到此时i和n实际上是共用的同一个地址,所以n的改变会影响上一级的模块中的i变量,即参数的双向传递!

实际中由于c语言并不是一种非常严谨的语言,它本身并不提供参数的双向传递功能,是用地址来实现的。在数据结构的课程中,以后只要发现参数中有&符号,它就是双向传递,即既有输入又有输出,可以把它理解成全局量,但全局量在整个系统的所有模块都起作用,&只在定义的函数(模块)中起作用,可以理解为“局部的全局量”。

&符号我想不出有很好和严谨的描述方法,如果一定要与某些东西类比,在pascal中的VAR是最接近的, 如

Proc change(VAR n:integer, m:integer) ************************************* 以上是我的老师的见解

[此贴子已经被作者于2005-10-7 13:50:46编辑过]


我的征途是星辰大海
2005-10-05 23:38
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
得分:0 
以下是我的见解 ******************** C语言中的&是取变量逻辑地址的操作, 与变量本身所在的物理地址没有关系,它直接与变量的值相关,即使变量本身所在的物理地址改变,对&操作也没有影响,&操作取值不会改变.*是取变量物理地址的操作, 即使变量本身所在的逻辑地址改变,对&操作也没有影响, &操作取值不会改变.但是 一旦物理地址中的数据改变,*操作所得的数据也将随之改变. 这就像是在一栋楼房中找人, &按入住人的名字找人,而*按门牌号找人, 虽然同是找人,但还是有本质上的区别的. 当且仅当门牌号对应的人入住人姓名找的人相同的时候, 找到的人才是同一个人.

我的征途是星辰大海
2005-10-05 23:40
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
得分:0 
至于是动态分配还是静态分配,还是去看书吧

我的征途是星辰大海
2005-10-05 23:42
fire77
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2005-9-19
得分:0 

2005-10-06 11:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-28139-1-1.html




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

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