函数输入问题:

1 带&和不带& (参数本身还是拷贝一份参数)

2 函数输入指针

#include  <iostream>
using namespace std;
int main( )
{
void swap(int *p1,int *p2); //函数声明
int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量a,b
cin>>a>>b;
pointer_1=&a; //使pointer_1指向a
pointer_2=&b; //使pointer_2指向b
if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和*pointer_2互换
cout<<"max="<<a<<" min="<<b<<endl; //a已是大数,b是小数
return 0;
}
void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

  

函数对比

#include  <iostream>
#include <stdlib.h>
using namespace std; void swap1(int p1, int p2);
void swap2(int *p1, int *p2);
void swap3(int &p1, int &p2); void swap1(int p1, int p2) //函数的作用是将p1的值与p2的值交换
{
int temp;
temp = p1;
p1 = p2;
p2 = temp;
} void swap2(int *p1, int *p2) //函数的作用是将*p1的值与*p2的值交换
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void swap3(int &p1, int &p2) //函数的作用是将p1的值与p2的值交换
{
int temp;
temp = p1;
p1 = p2;
p2 = temp;
} int main()
{ int *pointer_1, *pointer_2; //定义指针变量pointer_1,pointer_2,整型变量a,b
int a, b; a = 5;
b = 6;
swap1(a, b);
cout << "a=" << a << " b=" << b << endl; // 原值不变 a=5 b=6 a = 5;
b = 6;
swap2(&a, &b);
cout << "a=" << a << " b=" << b << endl; // 原值改变 a=6 b=5 a = 5;
b = 6;
swap3(a, b);
cout << "a=" << a << " b=" << b << endl; // 原值改变 a=6 b=5 a = 5;
b = 6;
pointer_1 = &a; //使pointer_1指向a
pointer_2 = &b; //使pointer_2指向b
cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 赋值 *pointer_1=5 *pointer_2=6 *pointer_1 = 5;
*pointer_2 = 6; swap1(*pointer_1, *pointer_2);
cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2<< endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值不变 *pointer_1=5 *pointer_2=6 *pointer_1 = 5;
*pointer_2 = 6; swap2(pointer_1, pointer_2);
cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值改变 *pointer_1=6 *pointer_2=5 *pointer_1 = 5;
*pointer_2 = 6; swap3(*pointer_1, *pointer_2);
cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值改变 *pointer_1=6 *pointer_2=5 system("pause");
return 0;
}

  

3 函数输入数组

C++中数组作为函数参数是传址。

#include <iostream>
using namespace std; // 函数声明
double getAverage(int arr[], int size); int main ()
{
// 带有 5 个元素的整型数组
int arr[5] = {1000, 2, 3, 17, 50};
double avg; // 传递一个指向数组的指针作为参数
avg = getAverage( arr, 5 ) ; // 输出返回值
cout << "平均值是:" << avg << endl; return 0;
}

  

4输入图像当参数

为了避免函数参数传递时出现复制情况,函数的形参多采用传递reference,如cv::Mat &image,传递输入图像的引用,不过这样函数可能会对输入图像进行修改,并反映到输出结果上;如果想避免修改输入图像,则函数形参可传递const reference,这样输入图像不会被修改,同时可以创建一个输出图像Mat,将函数处理的结果保存到输出图像Mat中,例如:void colorReduce4(const cv::Mat &image, cv::Mat &result,int div = 64)。
 解决方法1:去掉传入参数的引用符
 解决方法2:将传入参数copy一份再传入findContours函数

最新文章

  1. 分布式追踪系统dapper
  2. 开启Ubuntu root 远程登录
  3. 【转】SQL 操作类
  4. 九、Android学习第八天——广播机制与WIFI网络操作(转)
  5. BroadcastReceiver之有序广播
  6. poj 2253 Frogger (最短路变种,连通图的最长边)
  7. 【字符串处理】HDOJ-1020-Encoding
  8. C++容器类的简介
  9. 【Uva 12558】 Egyptian Fractions (HARD version) (迭代加深搜,IDA*)
  10. Linux企业级项目实践之网络爬虫(10)——处理HTTP状态码
  11. c++针对数据库,文件的操作总结(原始)
  12. 在 javascript 中,为什么 [1,2] + [3,4] 不等于 [1,2,3,4]?
  13. Android org.json.JSONArray cannot be converted to JSONObject
  14. 关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法
  15. JPA报错问题修改小结
  16. Unity 后处理堆
  17. Execl矩阵如何转化成Pajek的net文件
  18. QT中的小细节
  19. Java-性能调优工具-jstat
  20. Python 爬虫 —— 文件及文件夹操作

热门文章

  1. 超级简单POI多sheet导出Excel实战
  2. springboot yml配置文件注入值
  3. 谷歌浏览器安装Elasticsearch-head 插件
  4. ELK学习笔记之ELK6.0 X-pack设置用户名和密码
  5. 将EntityFrameworkCore生成的SQL语句输出到控制台,使用hangfire
  6. C# 特性和索引(C#学习笔记06)
  7. [Codeforces] Alex and a Rhombus
  8. VS2017 注册
  9. 来自GitHub的优秀开源项目系列
  10. 常用模块 - logging模块