将指针传递给函数只会改变函数范围中的值

时间:2015-07-29 21:39:46

标签: c++ function pointers

在将这些指针作为我的getImages函数的参数传递时,我似乎做错了。测试我的代码表明,在函数getImages中,我的指针home和start能够采用适当的值。但是在主要范围内再次测试它们的值都是0.我在下面列出了相关的代码片段。请告诉我如何正确传递这些论点。谢谢。

void getImages(IplImage *home, IplImage *start);

int main(int argc, char **argv)
{
    IplImage *home = 0;
    IplImage *start = 0;

    getImages(home,start);

2 个答案:

答案 0 :(得分:2)

您必须通过引用传递指针:

void getImages(IplImage *&home, IplImage *&start);

答案 1 :(得分:0)

指针是保存地址的变量。如果您将指针传递给getImages,那么您应该取消引用这些指针来访问实际对象。但是,由于您已将homestart指针设置为0,因此没有为IplImage对象分配内存,因此它不存在。因此,derefencing未分配的内存将导致编译器抱怨。

您应该通过引用传递:

void getImages(IplImage &home, IplImage &start)
{
    // do something with home
    // do something with start
}

int main(int argc, char **argv)
{
    IplImage home;
    IplImage start;

    getImages(home,start);
}

请注意,IplImage在堆栈上分配了内存,因为引用不能为null,与指针不同,引用需要在使用前分配内存。

希望有所帮助。