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

如何将类的指针从Main传递到函数并访问其中int、float等类型数据

解答(默认C++开发场景)

类指针传递与成员访问实现步骤

第一步:提前定义自定义类和目标函数原型

先声明包含多类型成员的类,同时把目标函数的形参指定为该类的指针类型,示例如下:

#include <iostream>
#include <string>
using namespace std;

// 自定义包含多类型成员的类
class MyData {
public:
    int intVal;
    float floatVal;
    string strVal;
};

// 目标函数,形参为MyData类的指针
void handleMyData(MyData* dataPtr);

第二步:在main函数中传递指针

你可以选择创建栈上的类实例,用&取址符获取地址传递,也可以创建堆上的动态实例直接传指针,两种方式都可以:

int main() {
    // 方式1:栈实例取址传递
    MyData data1;
    data1.intVal = 10;
    data1.floatVal = 3.14f;
    data1.strVal = "栈上实例测试";
    handleMyData(&data1); // 用&取址符传指针

    // 方式2:堆动态实例直接传指针
    MyData* data2 = new MyData();
    data2->intVal = 20;
    data2->floatVal = 6.28f;
    data2->strVal = "堆上实例测试";
    handleMyData(data2); // 直接传指针变量
    delete data2; // 用完记得释放堆内存避免泄漏

    return 0;
}

第三步:目标函数内访问类成员

拿到类指针后,用->操作符就能直接访问类的公开成员,也可以先解引用指针得到类实例再用.操作符访问,两种写法等价:

void handleMyData(MyData* dataPtr) {
    // 方式1:用->直接通过指针访问
    cout << "int值:" << dataPtr->intVal << endl;
    cout << "float值:" << dataPtr->floatVal << endl;
    cout << "string值:" << dataPtr->strVal << endl;

    // 方式2:先解引用再用.访问,和上面效果完全一致
    // cout << "int值:" << (*dataPtr).intVal << endl;
}

注意事项

  • 如果类的成员是private/protected权限,你需要在类中定义对应的get/set成员函数,才能在类外访问这些成员,不能直接用->读取修改
  • 传递指针前一定要确认指针是有效地址,不要传递空指针或者已经释放的野指针,避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:04