【问题标题】:C++ Technical Question on Pointer Dereferencing关于指针解引用的 C++ 技术问题
【发布时间】:2020-02-13 01:58:25
【问题描述】:

我们最近在我的大学 c++ 课上学习了指针,我只是有一个技术问题,因为当我谈到指针时,我想确保我所说的有道理。

因此,指针存储变量或对象之类的内存地址。但是,当您取消引用该变量以编辑该地址处的值时,幕后是真正访问和编辑存储在该位置的 RAM 中的值,或者它是从该内存位置访问变量然后只是更改它的值.或者它是同一个?我希望这是有道理的。

换句话说,说“编辑取消引用的指针会更改该内存位置的值”或“编辑取消引用的指针会更改连接到该位置的变量”是否更有意义。还是我只是想多了,这些语句实际上是相同的,因为在该内存位置编辑值也会同时编辑变量,因为这是变量获取数据的地方?

【问题讨论】:

  • “变量的内容”是一种编程结构。这些内容“存储在内存中”,一个实现细节。它们是“同一件事”——在两个不同的抽象层次上。人们也可以谈论实现“内存”的与非门。或者变量代表的“域模型”。再次 - “不同的抽象级别”。
  • 我也认为这是一个完全有效的问题。反对意见可能是因为已经可以在 SO 上找到答案,而且只要搜索得当,就可以在网络上的任何地方找到答案。示例:stackoverflow.com/questions/57483/… 和/或 stackoverflow.com/questions/4955198/…
  • 请记住,C++ 编译为原始二进制代码——诸如“变量”之类的东西在运行时并不真正存在,而是只有 CPU 操作码和原始内存的无差别汤。

标签: c++ pointers dereference


【解决方案1】:

也许这只是一个术语问题。不用太迂腐,标准术语是:

  • Object 是一个分配了存储区域的事物,该区域存储了一个值。对象可能有也可能没有名字,
  • 变量 要么是一个用名字声明的对象,要么是一个有名字的引用。

在您的问题中,您通过将新值写入对象的存储区域来修改对象的值。

*p 形式的表达式与对象的名称具有相同的类别(此术语为 lvalue),它指定对象的存储区域,可以使用读取或写入该区域。

【讨论】:

    【解决方案2】:

    在这段代码中:

    int *p = new int;
    *p = 5;
    

    p 指向的值没有名字。那里没有“变量”,只有一个内存位置。因此,最好只说“该位置的值已设置为 5”。

    【讨论】:

    • 是的,但是在这种情况下,您正在动态分配指针,如果您从创建的变量的地址初始化指针,例如 int x = 56;
    • 重点是不需要那样做,指针也不知道是指向变量还是匿名内存。它正在改变位置。如果指针指向一个变量,它会改变变量的值,但情况并非总是如此。
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多