首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL中指针的解引用

VHDL中指针的解引用
EN

Stack Overflow用户
提问于 2013-03-04 20:53:11
回答 2查看 5.2K关注 0票数 4

我还不能理解如何在VHDL中取消引用指针。

我心目中的C代码是这样的:

代码语言:javascript
复制
  int a;
  int* ptr_a;

  a = 42;
  ptr_a=&a;
  *ptr_a=451;// how can I do this ?

我试着用VHDL来模仿下面的代码:

代码语言:javascript
复制
ptr_test : process
    type     ptr_integer is access integer;
    variable a     : integer;
    variable ptr_a : ptr_integer;
  begin
    a         := 42;
    ptr_a     := new integer'(a);
    report "ptr now points to a : ptr=" & str(ptr_a.all);
    ptr_a.all := 451;
    report "ptr modified        : ptr=" & str(ptr_a.all);
    report "a   is NOT modified : a  =" & str(a);
    wait;
  end process;

那么,如何通过指针正确地修改一个值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-04 22:02:19

你不能直接。访问类型不是“像指针一样”--它们至少在某种程度上是不同类型的数据存储。

此行不会创建指向a的指针

代码语言:javascript
复制
ptr_a     := new integer'(a);

它创建一个与a具有相同值的数据对象,并设置ptr_a来引用它。

如果要创建另一个访问类型变量:

代码语言:javascript
复制
variable ptr_b : ptr_integer;

并将其设置为以指向ptr_a

代码语言:javascript
复制
ptr_b := ptr_a;

然后,对ptr_b.all的更改将反映在ptr_a.all中。

票数 6
EN

Stack Overflow用户

发布于 2013-03-04 22:09:09

"new“等同于(C++而不是C) "new”操作;调用一个构造函数,在堆上分配一个整数并将其初始化为"a“。(当然,你可以在完成后“释放”它)

你正在寻找的是ptr_a := a'access;,这是一种通过指针访问全局或局部(堆栈)变量的Ada方法:只有当变量被声明为“别名”时才是合法的,这会提醒编译器它可能有多个视图(从而阻止一些好的优化)。在C中,不管你愿意与否,所有的东西都是“别名”的。

这是Ada没有通过VHDL简化过程的一个方面:很难看到它有很好的用途。因此,在VHDL中没有完全等效的方法。

Martin的回答刚刚出现:正如他所说的,你可以有2个或更多指向同一个堆对象的指针。

或者,解释一下您试图以这种方式实现的目标;可能还有一种VHDL替代方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15202066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档