C++如何使用在子程序中创建的指针

C++ how to use a pointer which has been created in a subroutine

或夫人, 在 C++ 中,我正在考虑使用一个子例程来定义我在主体中首先声明的所有指针。我知道这可以通过每次使用 return 一个指针的函数来完成。因此,我仍然想在子程序中进行。我用谷歌搜索了很多,还没有找到答案。感谢您的帮助。 示例 C++ 代码如下:


#include <iostream> 
using namespace std;
void  testsub(int* k3d)
{
k3d= new int [10];
cout<<"test 0 "<<k3d[0]<<endl;
}
int  main ()
{
int* i3d=0;
testsub(i3d);
cout<<"test 1 "<<i3d[0]<<endl;
}

希望在子程序中定义虚拟指针k3d后,主体中的i3d可以使用。 非常感谢。

指针需要通过引用传递,否则你只是在更改该指针的本地副本。

void testsub(int*& k3d)

您还需要在 cout 语句之后调用 delete[],以避免内存泄漏:

delete [] i3d;

或者,您可以 return 来自子例程的指针。

#include <iostream> 

int* testsub()
{
    int* ptr = new int[10];
    std::cout << "test 0 " << ptr[0] << std::endl;
    return ptr;
}

int main()
{
    int *i3d = testsub();
    cout << "test 1 " << i3d[0] << endl;
    delete[] i3d;
    return 0;
}

或使用 std::vector 来保存整数集合。在这种情况下,您也不必担心内存 allocations/deallocations。

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> i3d(10);
    std::cout << "test 1 " << i3d[0] << std::endl;
    return 0;
}