作用域问题是程序设计里的一个最基础的问题,但今天遇到了一个之前没遇到的小问题,见以下这段程序段:
CvHistogram* hist;
{
int hist_size[] = { h_bins, s_bins };
float h_ranges[] = { 0, 180 }; // hue is [0,180]
float s_ranges[] = { 0, 255 };
float* ranges[] = { h_ranges, s_ranges };
hist = cvCreateHist(
2,
hist_size,
CV_HIST_ARRAY,
ranges,
1
);
}
CvHistogram* hist;这句声明了一个直方图类型变量,
{}这是一个单独的程序段,里面的所有变量的作用域仅限于{}括号内,出了这个程序段就无效,但hist这个变量是对全局有效的,因为它在外面定义,而这样做的好处我想应该是节省内存,这个单独的程序段相当于调用另外一个函数,当程序段(函数)执行完毕,所有里面的临时变量释放内存。这种写法很好,之前没用过,以后要学着用。