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

结构体变量作为函数的参数和返回值
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<stdio.h>
//定义一个结构体
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.x<<std::endl;
       std::cout<<"y is "<<point.y<<std::endl;
       **************************************/
}
//使用结构体变量作为函数的返回值
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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值