You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ob->i理应返回ob的this地址却返回i,求技术解释

为什么 ob->i 返回成员i的值而非对象的this指针地址?

哈哈,这个误会其实挺常见的——你是把->操作符的核心作用和对象地址的概念搞混啦!

先把->的本质说清楚:它就是个成员访问操作符,专门用来让你通过对象指针,直接访问指针指向的那个对象的成员变量/成员函数。当你写ob->i的时候,编译器会直接定位到ob指向的对象内部的i变量,返回的就是i本身的值,和this指针半毛钱关系都没有。

那你为啥会觉得它应该返回this地址呢?大概率是把几个概念搞混了:

  • this指针是类的成员函数内部才能访问的特殊指针,它指向的是当前调用这个成员函数的对象的地址,但ob->i是直接访问成员变量,根本没涉及成员函数,自然不会扯到this。
  • 如果想拿到ob指向的对象的地址,那直接写ob就行了——因为ob本身就是个指针变量,它存储的值就是目标对象的地址;要是想拿到ob这个指针自己的地址,那得写&ob。

给你贴个极简代码例子,一看就明白:

#include <iostream>
struct TestObj {
    int i = 42; // 初始化成员i为42
};

int main() {
    TestObj my_obj;
    TestObj* ob = &my_obj; // ob指向my_obj,存储的是my_obj的地址

    std::cout << ob->i << "\n";  // 输出42,直接取成员i的值
    std::cout << ob << "\n";     // 输出my_obj的地址,也就是ob存储的值
    std::cout << &ob << "\n";    // 输出ob这个指针变量自己的地址
    return 0;
}

最后再给你划个重点:

  • ob->成员:访问指针指向对象的成员,返回成员的值/引用
  • ob:本身就是对象的地址(因为它是指向对象的指针)
  • &ob:获取指针变量自身的地址

内容的提问来源于stack exchange,提问作者Saif Faidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:26:37