关于c++的中函数指针作为参数的问题

问题描述

关于c++的中函数指针作为参数的问题
函数实现
void swap(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

函数使用:
int i=1,j=2;
swap(i,j);

如上所示,swap函数传递进来的是两个整形变量的地址,有两个问题
1、那么swap的实现里面,为什么直接交换a,b的值就实现了地址交换?难道这里的a,b代表指针吗?
2、使用swap时为什么没有使用swap(&i,&j)?
初学c++,还望大家多多提点指教,先谢谢各位了

解决方案

[你这里处理得参数是引用,它可以修改变量得值,并能够生效。引用是hicpp的概念。跟指针有点像。

解决方案二:

首先,引用和一级指针都在被调用函数中只能通过修改值的方式修改它,这是因为被调用函数的内存在你退出被调用函数是释放。
第二,你的参数是引用,引用是变量的别名,就是变量的另一个名字,所以,你的实参也就直接用变量本身

解决方案三:

http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html

解决方案四:

函数指针参数的传递问题
函数指针参数的传递问题
关于c++ 函数指针的问题
----------------------

解决方案五:

函数里直接对参数进行修改,如果不是引用类型,是没法修改的,地址换了,值自然就换了

解决方案六:

swap参数里面传进去的是a.b的地址,所以值会改变。这里的ab是变量,&a和&b才代表指针。

解决方案七:

&是取地址的意思,void swap(int &a, int &b)
然后你调用后swap(i,j)
它会取i,j的地址,而不会发生复制的过程。直接让swap(i,j)中的i,j指向int i=1,j=2;

时间: 2024-08-22 15:14:38

关于c++的中函数指针作为参数的问题的相关文章

非递归二叉树遍历-c语言中函数指针作为参数与函数的嵌套

问题描述 c语言中函数指针作为参数与函数的嵌套 函数指针作为另一函数的参数和函数的嵌套的区别,感觉都是调用,有什么不一样呢?他们都适用在什么情况下!(我是在学非递归遍历二叉树时看到的) Status Visit(TElemType e){ printf("%cn",e); return OK; } Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e)){ SqStack S; InitStack(S); Push(S,

SQL中函数 replace 的参数1的数据类型ntext无效的解决方法

今天将一个ACC的数据库转换成ms-sql以后发现在使用replace替换语句的时候出现: SQL中函数 replace 的参数 1 的数据类型 ntext 无效.找了半天找到了解决办法: 因为ntext需要转化下 用如下语句即可解决: 复制代码 代码如下:UPDATE 表 SET 字段=REPLACE(cast(字段 AS varchar(8000)),'被替换的内容','将要替换成的内容') varchar(8000)是字段类型.8000是个很猛的字段,可以根据自己的实际情况改动!

opengl-OpenGL中函数glPointSize的参数意义

问题描述 OpenGL中函数glPointSize的参数意义 OpenGL中函数glPointSize的参数解释是指定栅格化点的直径,什么叫做点的直径,具体指什么? 解决方案 就是设置每个点的大小.

SQL中函数 replace 的参数1的数据类型ntext无效的解决方法_MsSql

今天将一个ACC的数据库转换成ms-sql以后发现在使用replace替换语句的时候出现: SQL中函数 replace 的参数 1 的数据类型 ntext 无效.找了半天找到了解决办法: 因为ntext需要转化下 用如下语句即可解决: 复制代码 代码如下: UPDATE 表 SET 字段=REPLACE(cast(字段 AS varchar(8000)),'被替换的内容','将要替换成的内容') varchar(8000)是字段类型.8000是个很猛的字段,可以根据自己的实际情况改动!

指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数

 1.指针数组    数组里面的每个元素都是指针.    指针数组的案例如下:    易犯错误: 2.数组指针   归根结底还是指针,只是取*的时候能够取出一整个数组出来. 数组指针:(一个指针指向了数组,一般和二维数组搭配使用). 下面的(p+1)表示的是加过20个字符.   3.函数指针: 在gcc编译的时候增加一些调试信息的方式是: gcc demo.c –g –o app   -g表示增加一些调试信息 objdump –dSsx app > file   将app反汇编,然后重定向到

深入解析C语言中函数指针的定义与使用_C 语言

1.函数指针的定义    函数是由执行语句组成的指令序列或者代码,这些代码的有序集合根据其大小被分配到一定的内存空间中,这一片内存空间的起始地址就成为函数的地址,不同的函数有不同的函数地址,编译器通过函数名来索引函数的入口地址,为了方便操作类型属性相同的函数,c/c++引入了函数指针,函数指针就是指向代码入口地址的指针,是指向函数的指针变量. 因而"函数指针"本身首先应该是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整形变量.字符型.数组一样,这里是指向函数.C在编译时,

简单谈谈Python中函数的可变参数_python

前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. 可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函

C/C++中函数指针的含义

函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址. 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误. int *fp(int a);//这里是错误的,因为按

C++中函数的默认参数详细解析_C 语言

使用方法:(1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数.(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替. 注意事项:(1)一般在声明函数是设置默认参数. 如果在函数声明和定义函数时都设置了默认参数,则以函数声明的默认参数为准. 复制代码 代码如下: #include<iostream>using namespace std;int main(){ double add(double a=3.2,double b=9.6);//在函数声明时设置默认参数 co