在C中,定义一个结构体为
Struct Date
{
Int month;
};
Struct Date D1,D2;
若用typedef来定义,则为
(1)
Typedef struct _Date
{
int month;
}Date;//Date为类型名
(2) Typedef struct //去掉_Date
{
int month;
}Date; //Date为类型名
(1)与(2)相同
若要定义一个结构体变量则为,Date D1,*p;
//定义结构体变量D1和指向结构体的指针变量p;
如果不用typedef,则定义变量比较麻烦,如
Struct _Date D1,D2;
Struct _Date *p;
Opencv中IplImage定义为:
typedef struct _IplImage
{
... ...
}
IplImage;
用法一:struct_IplImage *src=cvLoadImage("F:\\图片shizi.jpg");
用法二:IplImage*src= cvLoadImage("F:\\图片\\shizi.jpg");
用法一与用法二皆可,显然用法二更方便,也是常用的方法。也体现出了typedef的作用。
上面(1)与(2)相同,但是不知道opencv定义IplImage时为什么加了一个_IplImage.应该有它的道理吧.
介绍下对语句的理解
CvSizeSize1=cvSize(320,240);
在Opencv中定义为:
typedef struct CvSize //结构体
{
int width;
int height;
}
CvSize;
下面是定义的函数,只不过与常用的int或void定义的函数样子不太一样,本质上还是一样的。
# define CV_INLINEinline
CV_INLINE CvSize cvSize( int width, int height ) //定义函数
{
CvSize s;
s.width = width;
s.height = height;
return s;
}
分析,CV_INLINE CvSize cvSize( int width, intheight )
CV_INLINE是内置函数的意思,由# define CV_INLINE inline
可知。
CvSize cvSize( int width, int height )与我们常定义的函数,例如,
Int max (inta,int b)
外形是一样的,
CvSize是函数返回值的类型,根据上面的定义
typedef structCvSize
{
int width;
int height;
}
CvSize;
知,CvSize是结构体类型名,与int地位一样。而cvSize是定义的函数名,即对应max。
因为大学时学习不认真,以至于基础太差,这一句CV_INLINE CvSize cvSize( int width, int height ) //定义函数
是今天才知道的,以前都没想到这样也可以。
上面的结构体定义是c中的,c++的是另一种定义方式。
上面是一点理解,菜鸟难免有错,欢迎指出!