结构体变量作为函数的参数和返回值

结构体变量作为函数的参数和返回值
2010-07-28 13:14

准备学习一下OpenCV,可是第一个知识点的语法就没有看懂:

typedef struct CvPoint
 {
  int x; /* X坐标, 通常以0为基点 */
  int y; /* y坐标, 通常以0为基点 */
 }
CvPoint;
/* 构造函数 */
inline CvPoint cvPoint( int x, int y );
注意CvPoint结构体是大写的C,而cvPoint()构造函数则是小写的c,若是相同,则编译通不过。
于是就搜索了一下,才知道,原来结构体可以作为函数的参数,也可以作为函数的返回值
以前一直使用结构体指针,不知道直接使用结构体变量和使用结构体指针变量有什么区别?
不过在OpenCV中,很多函数都是直接使用结构体变量的,也许这样操作速度更快??
谷歌了很久,找到一个为什么这么用的答案:
这么用属于函数的传值调用,函数中使用的是结构体的副本,函数中的操作不会改变原结构体的值,但是会牺牲一些速度。
 
用指针传递结构体变量的话,属于传址调用,是直接操作结构体,所以函数中的操作直接反应到结构体上。OpenCV中这么做,一是结构体比较小,影响内存开销比较小;二是防止改变结构体本身吧。一点浅见。
下面是C/C++的例子。编译测试正常。
/****************************************
结构体变量可以直接作为函数的参数,
也可以作为函数的返回值。
*****************************************/
//Filename: Struct.c
#include
//定义一个结构体
typedef struct Point
{
       int x;
       int y;
}Point;
//使用一个结构体变量作为函数的参数
void Display(Point point)
{
       printf("x is %d\n",point.x);
       printf("y is %d\n",point.y);
       /*********若使用C++,则如下*************
       std::cout<<"x is "<
//使用结构体变量作为函数的返回值
Point SetPoint(int x,int y)
{
       Point point;
       point.x=x;
       point.y=y;
       return point;
}
//主函数
int main(int atgc,char * argv[])
{
       Point point;
       point=SetPoint(2,3);
       Display(point);
       return 0;
}
运行结果

x is 2
y is 3

你可能感兴趣的:(程序相关)