我在Ada95中工作,并且在找出指针方面遇到困难。

我有如下代码:

type vector is array (1 .. 3) of integer;
type vector_access is access vector;

my_vec : vector;

procedure test is
  pointer : vector_access := my_vec'access;
begin
  ...
end;


这无法编译指针的定义,说


“'ACCESS的前缀必须是对象的别名视图,或表示具有非内部调用约定的子程序”


如果然后将向量本身的定义更改为:

my_vec : aliased vector


现在返回编译器错误:


“ X'ACCESS的预期类型,其中X表示对象的别名视图,必须是常规的acces类型”


归根结底,我真正需要的是一个指向数组中特定项目的指针,该位置根据输入参数是动态的。谁能指出我正确的方向?

最佳答案

如果您使用的是GNAT,则“必须是常规访问类型”之后的错误消息应该为您提供了解决方案:


添加“全部”以键入“ vector_access”
在第...行定义


这样您最终会得到:

type Vector_Access is access all Vector;


使用“ all”来指定常规访问类型与Ada中的动态内存分配池有关。如果您不关心动态内存分配池,则不必担心,只需在访问类型定义中包括“全部”即可。

我不确定这是否是一天结束后要查找的内容的一部分,但是您知道,在大多数情况下,Ada的访问(指针)类型用于处理动态分配的内存,对吗?

因此,您不必动态地将my_vec指向别名变量,而是可以动态分配它:

Pointer_2_Dynamic : vector_access := new Vector;


这样,您可以在运行时动态分配所需的对象,并轻松处理大小可变的对象(尽管您需要使用不同的向量定义来完成此操作:

type Dynamic_Vector is array (Natural range <>) of Integer;
type Dynamic_Vector_Access is access Dynamic_Vector;

N : Natural := 10; -- Variable here, but could be a subprogram parameter.
Dyn_Vector : Dynamic_Vector_Access := new Dynamic_Vector(1..N);

关于pointers - Ada数组访问:指向数组中特定项目的指针,该位置基于输入参数是动态的。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3780962/

10-11 22:37
查看更多