最保险的函数间数组作为参数值传递与返回方法,用memcpy函数!

来源:互联网 发布:淘宝规则在哪里查看 编辑:程序博客网 时间:2024/05/21 20:30
举例代码如下:
void mycvCalcHist(IplImage *img,double out_hist[256]){int i=0, j=0;  double temp1=0;int temp2=0;    const int hist_sz = 256;//0到255,一共256个灰度值      double hist[hist_sz];      memset(hist, 0, sizeof(hist));           for( i = 0; i < img->height; i++ )      {          for( j = 0; j < img->width; j++ )  {temp1=cvGet2D(img,i,j).val[0];temp2=int(temp1);//作类型转换            hist[temp2]++; //这里实现了hist中存储各灰度值出现的次数  }    }  memcpy(out_hist,hist, sizeof(hist)); //肯定有人要问,为啥不用数组名作为参数传递从而改变实参数组的值    //这种方法一般情况下都可以,我也测试了,然而这里就是不行,我估计与     //memset(hist, 0, sizeof(hist));这句语句有关}

分析:函数mycvCalcHist中自己定义了一个名为hist的数组,实际上就是out_hist这个数组,out_hist是主调函数中的数组,在这里,我只需要最后做一个memcpy即可实现值返回;如果要作值传递,我猜想也简单(并未作实际测试),进入函数时把out_hist这个数组值复制给hist就行,函数快结束时再把hist的值复制到out_hist应该就可以了!由于是局部数组,所以函数运行完后hist就给释放掉了,所以也不会多占用多少内存空间。
肯定有人要问,为啥不用数组名作为参数传递从而改变实参数组的值?这种方法一般情况下都可以,我也测试了,然而这里就是不行,我估计与memset(hist, 0, sizeof(hist));这句语句有关!所以以后遇到这种情况最保险的方法还是用memcpy函数!
0 0
原创粉丝点击