函数输入问题:

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. 详解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. Range Sum Query - Mutable 精简无递归线段树

    操作: 单点更新,区间求和 区间求和:如sum [3,10) 需要对19,5,12,26节点求和即可. 观察可知,左端点为右子节点(奇数)时直接相加,右端点为左子节点(偶数)时直接相加,两边向中间移动 ...

  2. java 对象参数去空格方式

    import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { /** * 去掉bean中所有 ...

  3. Go语言【数据结构】指针

    指针 本章围绕字符串.数字.数组.切片.map.channel.结构体与指针赋值及函数传参的应用剖析 字符串 字符串本身也是StringHeader的结构体,包含Data指针与字符串长度,如下 typ ...

  4. 【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆

    原题传送门 首先先要学会麻将,然后会发现就是一个暴力dp,分三种情况考虑: 1.非七对子国士无双,设\(dp_{i,j,k,a,b}\)表示看到了第\(i\)种牌,一共有\(j\)个\(i-1\)开头 ...

  5. mysql 中 and和or 一起使用和之间的优先级

    SELECT address,job_title,education,SUM(recruiting) FROM commerce_jobs WHERE education = '大专' and ( j ...

  6. Kafka Streams的Data Types and Serialization

    Avro <repositories> <repository> <id>confluent</id> <url>http://packag ...

  7. Vue3.0结合bootstrap做多页面应用(2)基础配置

    接下来就是多页面应用的配置啦,安装完vue 3.0可以发现目录比2.0的精简了很多, public相当于原来的static,里面的index.html是项目的入口 ,src同以前一样,cli3.0没有 ...

  8. 处理收到的Stanzas

    处理收到的Stanzas 背部 Smack使用两种结构提供了一个灵活的框架来处理传入的节: org.jivesoftware.smack.StanzaCollector - 一个允许您同步等待新节的类 ...

  9. The underlying connection was closed: An unexpected error occurred on a receive

    解决方法 webRequest.KeepAlive = false; ServicePointManager.ServerCertificateValidationCallback += (s, ce ...

  10. 使用基础知识完成java小作业?强化练习-1.输入数组计算最大值-2.输出数组反向打印-3.求数组平均值与总和-4.键盘输两int,并求总和-5.键盘输三个int,并求最值;

    完成几个小代码练习?让自己更加强大?学习新知识回顾一下基础? 1.输入数组计算最大值 2.输出数组反向打印 3.求数组平均值与总和 4.键盘输两int,并求总和 5.键盘输三个int,并求最值 /* ...