在 Ada 中使用指针访问值
Access the value using pointer in Ada
我对 Ada 有点陌生,对这种语言的语法有一些困难。
我已经实现了一个堆栈,并向它压入一个值,例如,我需要使用一个函数Push(Stack_instance, value)
。
我需要很多这样的堆栈实例,而不是固定大小。所以我想使用指向堆栈的指针,每次我需要时都会创建新的堆栈对象。
现在,我遇到的问题是,在创建指向新堆栈的堆栈指针后,如何将值推送到该堆栈实例?我不能使用 Push(Stack, value)
,因为 Push
函数需要类型 Stack
而我有 Ptr_Stack
。例如,在C中,我们有*ptr
,我们可以通过它访问值,但是在Ada中有类似的东西吗?
您可以:
Push (Stack.all, Value);
如果您使用的是 Ada 2005 或更新版本,并且您的堆栈类型是标记类型,您还可以使用稍微更人性化的:
Stack.Push (Value);
最后,您还可以更改 Push 的声明以接受指向堆栈的指针,如:
procedure Push (Stack : not null access Stack_Type; Value : ...);
Push (Stack, Value);
我对 Ada 有点陌生,对这种语言的语法有一些困难。
我已经实现了一个堆栈,并向它压入一个值,例如,我需要使用一个函数Push(Stack_instance, value)
。
我需要很多这样的堆栈实例,而不是固定大小。所以我想使用指向堆栈的指针,每次我需要时都会创建新的堆栈对象。
现在,我遇到的问题是,在创建指向新堆栈的堆栈指针后,如何将值推送到该堆栈实例?我不能使用 Push(Stack, value)
,因为 Push
函数需要类型 Stack
而我有 Ptr_Stack
。例如,在C中,我们有*ptr
,我们可以通过它访问值,但是在Ada中有类似的东西吗?
您可以:
Push (Stack.all, Value);
如果您使用的是 Ada 2005 或更新版本,并且您的堆栈类型是标记类型,您还可以使用稍微更人性化的:
Stack.Push (Value);
最后,您还可以更改 Push 的声明以接受指向堆栈的指针,如:
procedure Push (Stack : not null access Stack_Type; Value : ...);
Push (Stack, Value);