如何将类的指针从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
相关产品推荐
相关产品推荐

