今天写了下面这个程序
int GetImage(IplImage* img)
{
img = m_Cam->CaptureImage();
if(img)
return 0;
else
return -1;
}
IplImage* pImg = NULL;
GetImage(pImg);
本来想通过指针参数pImg去获得函数内部产生的内存(这里是图像),但发现pImg并没有指向获取的内存,仍然为NULL,觉得很奇怪。
从网上查到,林锐博士的《高质量C++/C编程》中有对这个问题的专门阐述:
void GetMemory(char* p, int num)
{
p = (char*)malloc(sizeof(char)*num);
}
void Test(void)
{
char* str = NULL;
GetMemory(str, 100);
strcpy(str, "hello");
}
原因是编译器会给参数p建立一个参数副本_p,p的值会赋给副本_p,函数内部对_p进行操作。由于_p与p的值相同,指向同样的内存,所以对_p的内容进行改动就会改变p所指向的内容,这就是指针参数的一般用法。但是,将_p指向新内存的时候,p指向的位置并未改变,所以p无法获得新的内存。