函数输入问题:

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

2 函数输入指针

  1. #include <iostream>
  2. using namespace std;
  3. int main( )
  4. {
  5. void swap(int *p1,int *p2); //函数声明
  6. int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量a,b
  7. cin>>a>>b;
  8. pointer_1=&a; //使pointer_1指向a
  9. pointer_2=&b; //使pointer_2指向b
  10. if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和*pointer_2互换
  11. cout<<"max="<<a<<" min="<<b<<endl; //a已是大数,b是小数
  12. return 0;
  13. }
  14. void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换
  15. {
  16. int temp;
  17. temp=*p1;
  18. *p1=*p2;
  19. *p2=temp;
  20. }

  

函数对比

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. void swap1(int p1, int p2);
  6. void swap2(int *p1, int *p2);
  7. void swap3(int &p1, int &p2);
  8.  
  9. void swap1(int p1, int p2) //函数的作用是将p1的值与p2的值交换
  10. {
  11. int temp;
  12. temp = p1;
  13. p1 = p2;
  14. p2 = temp;
  15. }
  16.  
  17. void swap2(int *p1, int *p2) //函数的作用是将*p1的值与*p2的值交换
  18. {
  19. int temp;
  20. temp = *p1;
  21. *p1 = *p2;
  22. *p2 = temp;
  23. }
  24. void swap3(int &p1, int &p2) //函数的作用是将p1的值与p2的值交换
  25. {
  26. int temp;
  27. temp = p1;
  28. p1 = p2;
  29. p2 = temp;
  30. }
  31.  
  32. int main()
  33. {
  34.  
  35. int *pointer_1, *pointer_2; //定义指针变量pointer_1,pointer_2,整型变量a,b
  36. int a, b;
  37.  
  38. a = 5;
  39. b = 6;
  40. swap1(a, b);
  41. cout << "a=" << a << " b=" << b << endl; // 原值不变 a=5 b=6
  42.  
  43. a = 5;
  44. b = 6;
  45. swap2(&a, &b);
  46. cout << "a=" << a << " b=" << b << endl; // 原值改变 a=6 b=5
  47.  
  48. a = 5;
  49. b = 6;
  50. swap3(a, b);
  51. cout << "a=" << a << " b=" << b << endl; // 原值改变 a=6 b=5
  52.  
  53. a = 5;
  54. b = 6;
  55. pointer_1 = &a; //使pointer_1指向a
  56. pointer_2 = &b; //使pointer_2指向b
  57. cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
  58. cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 赋值 *pointer_1=5 *pointer_2=6
  59.  
  60. *pointer_1 = 5;
  61. *pointer_2 = 6;
  62.  
  63. swap1(*pointer_1, *pointer_2);
  64. cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2<< endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
  65. cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值不变 *pointer_1=5 *pointer_2=6
  66.  
  67. *pointer_1 = 5;
  68. *pointer_2 = 6;
  69.  
  70. swap2(pointer_1, pointer_2);
  71. cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
  72. cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值改变 *pointer_1=6 *pointer_2=5
  73.  
  74. *pointer_1 = 5;
  75. *pointer_2 = 6;
  76.  
  77. swap3(*pointer_1, *pointer_2);
  78. cout << "pointer_1=" << pointer_1 << " pointer_2=" << pointer_2 << endl; // 指针内存地址 pointer_1=000AABBD50 pointer_2=000AABBD55
  79. cout << "*pointer_1=" << *pointer_1 << " *pointer_2=" << *pointer_2 << endl; // 原值改变 *pointer_1=6 *pointer_2=5
  80.  
  81. system("pause");
  82. return 0;
  83. }

  

3 函数输入数组

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

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // 函数声明
  5. double getAverage(int arr[], int size);
  6.  
  7. int main ()
  8. {
  9. // 带有 5 个元素的整型数组
  10. int arr[5] = {1000, 2, 3, 17, 50};
  11. double avg;
  12.  
  13. // 传递一个指向数组的指针作为参数
  14. avg = getAverage( arr, 5 ) ;
  15.  
  16. // 输出返回值
  17. cout << "平均值是:" << avg << endl;
  18.  
  19. return 0;
  20. }

  

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. 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)

    一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = &num; printf( ...

  2. 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告

    2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一 ...

  3. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  4. C语言对数组取地址

    #include <stdio.h> main() { ] = {,,,,}; printf("a=%p\n" , a); printf("a=%p\n&qu ...

  5. 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

    这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...

  6. 介绍了如何取成员函数的地址以及调用该地址:C++

    摘要:介绍了如何取成员函数的地址以及调用该地址. 关键字:C++成员函数 this指针 调用约定 一.成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西.对普通的函数指针来说,可以视为一 ...

  7. 函数名&函数名取地址

    有时看到如下的代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*****************************/ #includ ...

  8. C语言函数名以及取地址的区别和联系

    有时看到如下的代码: /*****************************/ #include <stdio.h> #include <string.h> #inclu ...

  9. 总结C++中取成员函数地址的几种方法

    这里, 我整理了4种C++中取成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的. 其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2 ...

随机推荐

  1. 【chromium】 Chromium OS的oom机制

    前一段时间,运行在Chromium OS上的一个相机应用经常会自己崩溃,进程戛然而止,测试过程中发现使用的内存以肉眼可见的内存增长,当增长到1G左右,应用窗口突然消失,虽然原因不明,但是能猜到个大概, ...

  2. FPGA+ADV7511实现HDMI显示

    一.前言 目前FPGA成为了视频图像实时处理的主要平台.显示作为图像应用设备的必要功能,对整体系统处理效果非常关键.HDMI是现阶段主流的显示接口,本文基于ADV7511芯片的HDMI显示系统,讲述H ...

  3. Prometheus 配置采集目标

    Prometheus 配置采集目标 1.根据配置的任务(job)以http/s周期性的收刮(scrape/pull)2.指定目标(target)上的指标(metric).目标(target)3.可以以 ...

  4. PHP7.3.0+弃用FILTER_FLAG_SCHEME_REQUIRED的解决办法

    今天本地调用一个接口报错了: filter_var(): explicit use of FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIR ...

  5. "类"的讲稿

    -----------------------面向对象基础------------------------------------方法(函数) { (c#p10为主,p27;javap96)+资料,讲 ...

  6. Ubuntu系统下基于docker部署Jenkins环境

    本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...

  7. 详细的Hadoop的入门教程-单机模式 Standalone Operation

    一. 单机模式Standalone Operation 单机模式也叫本地模式,只适用于本地的开发调试,或快速安装体验hadoop,本地模式的安装比较简单,下载完hadoop安装包就可以直接运行. 1. ...

  8. jquery实现简单定时轮播图

    JS $(document).ready(function(){ var index = 0; //刚开始设置一个index,index为图片的索引值 $(".pictureDemo img ...

  9. 一步一步学Spring Boot 2 微服务项目实战 - 黄文毅-2018年8月第一次印刷

    properties 配置文件的优先级高于.yml .在properties文件中配置了server.port=8080 同时在.yml中配置了server.port=8090  Spring Boo ...

  10. 【MySQL】数据库事务深入分析

    一.前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不 ...