pascal指针问题求助

2025-05-05 17:09:10
推荐回答(5个)
回答1:

link:zhizhen
这么做的原因是为了建立链表
如果你写c[1]:=c[1]^.link,意思就是在这个链表上前进一格(因为c[1]和c[1]^.link的格式相同)
【c[1]】-》【c[1]^.link】
不过在这之前要先给c[1]^.link一个指针域(最简单的方法是new(c[1]^.link))

而c[1]^.link:=c[2]^.link的用处应该是将c[1]及c[1]之前的指针域合并到c[2]链表上
【c[1]^.link】-》
【c[2]^.link】
【c[2]】-》

指针不能直接输出

链表就是将指针一个个连起来(通过你这个程序中的link,可以在这个链表四处走动,不过只能往一个方向)

链表的建立你做对了,但可以增加更多类似shuju和link的记录分量使指针的一个节点储存更多的信息和使你能在这个链表里朝更多的方向走动。

回答2:

这是一个递归嵌套式的定义。
我给你给标程吧,功能自己研究。
program link(input,output); // 创建链表
type pointer=^rec;
rec=record
data:string[5];// 5 is the length of the string
next:pointer;
end;
{_______________________________________________________}
var
p1,p2,h:pointer;
i:Longint;
{_______________________________________________________}
Begin
new(p1);
writeln('Input data:');
readln(p1^.data);
h:=p1;
for i:=1 to 9 do
begin
new(p2);
writeln('Iput data:');
readln(p2^.data);
p1^.next:=p2;
p1:=p2;
end;
p2^.next:=nil;
p1:=h;
while p1<>nil do
begin
write(p1^.data,'--->');
p1:=p1^.next;
end;
End.

回答3:

指针表示的是地址,也就是数据存储的地方。你的代码似乎不能编译通过吧?
其中的c1、c2是什么意思?好像没有的。
另外指针应该是不能输出的。
那我说自己对指针的理解吧。
类比数组(其实我觉得指针的所有应用都可以用数组代替),那么你的定义可以改成:
type
zhizhen = longint;
yu = ……(略去)
var
E : array[0..100000] of yu;
c : array[1..4] of zhizhen;
可以看出E数组就和空间内存一样,在你new(c[i])的时候,系统自动找到E数组里面一个没有存储过的位置temp,然后让c[i] := temp;
所以,c[1] := c[2],就是把c[1]的地址指向c[2],对E数组没有影响。
而c[1]^ := c[2]^,相当于E[c1[1]] := E[c2[1]],显然它改变了E数组,即改变了数据。
而c[1]^.link := c[2]^.link,相当于E[c1[1]]^.link := E[c2[1]]^.link,也是改变了数据。
为了更好的说明链表,先用两个数组来解释链表:
shuju : array[1..10000] of longint;
link : array[1..10000] of longint;
这就是链表,其中link[i]表示元素i的下一个元素的位置,这样就可以访问链表了。
那么用指针代贴数组的做法也很类似,link表示的也是下一个元素的位置,如果你想想E数组就可以理解链表了。
以下是读入一串数据然后组成链表的代码:
new( c[1] ); p := c[1];
for i := 1 to n do {n表示链表长度}
begin
read( p^.shuju );
new( p^.link ); p := p^.link;
end;
链表的好处是空间需求不定,属于动态数据结构。
以上纯属个人观点,如有错误,望纠正。

回答4:

cru

回答5:

var