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

时间:2015-03-19 20:54:38

标签: c++ pointers subroutine

或太太, 在C ++中,我正在考虑使用子例程来定义我在主体中首先声明的所有指针。我知道可以通过使用函数每次返回一个指针来完成。因此,我仍然希望在子程序中执行此操作。我google了很多,还没找到答案。非常感谢您的帮助。 示例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。 非常感谢提前。

2 个答案:

答案 0 :(得分:8)

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

void testsub(int*& k3d)

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

delete [] i3d;

答案 1 :(得分:1)

或者,您可以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来保存整数集合。在这种情况下,您也不必担心内存分配/解除分配。

#include <vector>
#include <iostream>

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