修改 class 内的指针

Modify pointer inside class

我在 class 中操作指针时遇到问题。

#include <iostream>

using namespace std;

class myClass {
public:
    void modifyPointer(float *pointer);
};

void myClass::modifyPointer(float *pointer) {
    pointer = new float[3];
    pointer[0] = 0;
    pointer[1] = 1;
    pointer[2] = 2;
    cout << "Address: " << pointer << endl;
}

int main()
{
    float* pointer;
    myClass object;
    object.modifyPointer(pointer);
    cout << "Address: " << pointer << endl;
    cout << "Values: " << pointer[0] << "," << pointer[1] << "," << pointer[2]
        << std::endl;

    return 0;
}

当我在 class 中打印指针时,我得到了它的地址,但是在主程序中,我在打印值时得到了一个 0 地址和一个段错误。我怎么修改这个指针有什么错?

您正在复制指针,因此您看不到 main 中的更改。您需要通过引用获取指针,如下所示:

void myClass::modifyPointer(float * &pointer) {
   pointer = new float[3];
   // ...
}

当然,您还必须更改此函数的声明。

这是一个有效的 demo

指针与任何其他对象一样。按值将对象作为参数传递会创建该对象的副本。这意味着 main() 中的原始 pointer 不受影响。由于它不受影响且未初始化,因此使用 pointer[any_index] 越界访问数组会导致 undefined behavior。而是通过引用传递:

void modifyPointer(float*& pointer)