1
我對帕斯卡相對陌生,目前正在使用指針。 我有2條記錄,其中一條包含2個指向其他記錄類型的指針。帕斯卡指針改變他們的指向值
type
WaypointRef = ^Waypoint;
PathRef = ^Path;
Waypoint = record
id: integer;
Name: string;
pathRefs: array of PathRef;
end;
Path = record
distance: integer;
WaypointRefA, WaypointRefB: WaypointRef;
end;
所有的航點都保存在一個數組中。 現在,當我試圖讀出路徑的值,我得到神祕結果:
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[1].pathRefs[0]^.distance);
雙方應打印相同的價值觀,但他們沒有。 然而,更神祕的事情是,即使我嘗試以下方法:
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[0].pathRefs[0]^.distance);
writeln(waypoints[0].pathRefs[0]^.distance);
我得到2個不同的值。 (正確的--173 - 之後的所有時間。)
waypoints[0].pathRefs[0]^
總是指向相同的地址,因此我很困惑。我希望有人知道這個問題。
編輯:2似乎是默認值,因爲它也返回2,如果我不在路徑創建時將任何值保存到「距離」。
編輯2:這裏的航點和路徑創建的代碼。我認爲必須有失敗。我現在可能因爲程序中的程序而導致設計混亂。我只是在試驗。
procedure buildWaypoint(Name: string);
procedure addWaypoint(w: Waypoint);
var
lngth: integer;
begin
lngth := Length(waypoints);
SetLength(waypoints, lngth + 1);
waypoints[lngth] := w;
end;
var
w: Waypoint;
begin
w.id := id;
id := id + 1;
w.Name := Name;
addWaypoint(w);
end;
procedure buildPath(waypointRefA, waypointRefB: WaypointRef; distance: integer);
procedure addPath(pRef: PathRef);
procedure addPathToWaypoint(pRef: PathRef; wRef: WaypointRef);
var
lngth: integer;
begin
lngth := length(wRef^.pathRefs);
SetLength(wRef^.pathRefs, lngth + 1);
wRef^.pathRefs[lngth] := pRef;
end;
begin
addPathToWaypoint(pRef, pRef^.WaypointRefA);
addPathToWaypoint(pRef, pRef^.WaypointRefB);
end;
var
p: path;
begin
p.distance := distance;
p.WaypointRefA := waypointRefA;
p.WaypointRefB := waypointRefB;
addPath(@p);
end;
你能告訴你如何設置pathRefs數組嗎? –
如果你還在使用數組,你爲什麼要使用指針? –
請顯示一個完整的測試,以便您的問題可以複製。 @ No'amNewman,指針在這裏,以便記錄可以在不重複的情況下交叉引用數據。 –