【问题标题】:Access the value using pointer in Ada在 Ada 中使用指针访问值
【发布时间】:2016-02-10 15:34:25
【问题描述】:

我对 Ada 有点陌生,对这种语言的语法有些困难。

我已经实现了一个堆栈,并且要向它推送一个值,例如,我需要使用一个函数Push(Stack_instance, value)

我需要很多这样的堆栈实例,而不是固定大小。所以我想使用指向堆栈的指针,每次需要时都会创建一个新的堆栈对象。

现在,我遇到的问题是,在创建指向新堆栈的堆栈指针后,如何将值推送到此堆栈实例?我不能使用Push(Stack, value),因为Push 函数需要Stack 类型,而我有Ptr_Stack。例如,在 C 中,我们有 *ptr 可以通过它访问值,但在 Ada 中是否有类似的东西?

【问题讨论】:

  • 关于 Ada 和访问类型的常用建议:隐藏您对包内访问类型的使用。避免让包的用户不得不考虑内存管理。
  • 关于 Ada 和访问类型的更多建议:除非必须,否则不要使用它们!您可以将Stack 作为in out 参数传递;类似于 C++ 参考。

标签: ada abstract-data-type


【解决方案1】:

你可以这样做:

Push (Stack.all, Value);

如果您使用的是 Ada 2005 或更新的版本,并且您的堆栈类型是标记类型,您还可以使用更人性化的:

Stack.Push (Value);

最后,你也可以修改Push的声明,接受一个指向栈的指针,如下:

procedure Push (Stack : not null access Stack_Type; Value : ...);
Push (Stack, Value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2016-02-20
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多