从实参向形参传递参数时有两种方式可以使用:

1. 指针

使用指针传递时,如果目的是对实参的参数进行相关修改,则需要将实参变量的地址传递给形参,也就是说,形参需要定义为可以存放实参变量地址的变量,举个例子:

//此处定义函数,函数参数为整型指针变量,用来接收实参变量地址;

void f(int*q,int*p) {

//在这里对*q,*p进行修改,就是对实参的整型变量内容进行修改;

}

int main()

{ ...

int a,b;

f(&a,&b);

//此处直接将变量地址传递过去,当然也可以另外定义两个整型指针变量,用来存放整型变量地址,然后将地址发送过去,但是这样使代码冗余,并且定义的变量过多不如这种形式简洁;

...

Return 0;

}

再举个例子,如果要修改指针本身的内容,比如说主函数将一个指针传递给被调函数,想让被调函数分配一定的空间,这个时候就需要修改指针指向,也就是说要修改指针内容;

void f(int **Q,int**P) {

//因为主函数传递过来的是整型指针变量地址,所以使用*Q *P可以对整型指针变量内容进行修改,比如说让指针指向新分配的单元。

//同时,在这里也可以说Q P是指针的指针;

}

int main() { ...

int *p,*q;

int a,b,c,d;

f(&p,&q)

...

return 0;

}

再进行多层嵌套是相同的,如果要对主函数的某一个变量进行修改,就必须将被调函数的形参设置为可以指向实参变量的变量(可能是多重嵌套指针)

2. 引用

在c++中,可以使用引用来对参数进行修改,举个例子

# include <stdio.h>

//在这里定义函数类型的时候,需要将参数类型定义为实参类型名后加&,在这里&这个符号的意思是引用,而不是取地址;

void f(int &, int &);

int main()

{

int a = 3;

int b = 5;

printf("%d %dn", a, b);

f(a, b);

//这里这个函数用来交换两个变量的值,在向函数传递的时候,不用发参数的地址,直接把参数发过去;

printf("%d %dn", a, b);

return 0;

}

void f(int &x, int &y)

//在这里使用引用类型,相当于是实参变量的一个别名,如果用&是取地址的意思理解的话,可以说是&取了传递过来的那个参数的地址,并使用形参名对这个地址重新命了名(这一说法并不一定正确,仅仅是为了方便理解&取地址)

//&引用的意思是为传递过来的参数取了一个别名,对这个别名进行操作时,与对原变量是一样的;

{

int t = x;

x = y;

y = t;

}

再写一个例子;

# include <stdio.h>

void f(int *&, int *&);//这里同样的,需要在要进行修改的实参类型后面加&,综合上面,也就是说,你要修改什么就在对应类型后面加上&。

int main()

{

int a = 3;

int b = 5;

int *p = &a;

int *q = &b

printf("%p %pn", p, q);

f(p, q);//这里还是传递变量的值,不过与上面不同的是,这里是指针变量;

printf("%p %pn", p, q);

return 0;

}

void f(int *&x, int *&y)//对指针变量加上引用,来为传递过来的实参取个别名;

{

int *t = x;

x = y;

y = t;

}

结合两点,总的来说,凡是要对数据进行修改,使用指针时,被调函数的参数名需要在原变量类型名后加上*,然后再函数内部访问修改原变量时,需要在被调函数内部的变量名前加上*;而使用引用,则是在被调函数参数名后加&,在函数内部使用时,直接就可以用变量名来访问;

c++ 取成员函数地址_c及c++指针及引用简单解释(自学学习心得)相关推荐

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

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

  2. 介绍了如何取成员函数的地址以及调用该地址

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

  3. 获取成员函数地址及获取函数地址

     首先我们定义一个类Ctest,类里面包含三个不同形式的成员函数,静态成员函数statFunc().动态成员函数dynFunc()和虚拟函数virtFunc().在main函数中我们利用cout标 ...

  4. C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元

    1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...

  5. printf 指针地址_c语言对指针的理解

    先来讲一下本人学指针的经历:大一的时候刚接触c语言对指针这东西真的是太迷了,感觉麻烦难懂不想其他语言一样.但是搞懂以后就被指针的魅力吸引甚至喜欢上c语言.不多讲,开始!(文章可能有些长,但放心全是基础 ...

  6. python指针引用的区别_C++基础:指针和引用的区别

    C++基础:指针和引用的区别 *例 int a; int &b = a; 其中b是a的引用,b引用了a,a被b引用.b 相当于 a 的别名,对 b 的任何操作就是对a的操作.所以b既不是a的拷 ...

  7. java 指针 引用_C++中的指针和引用与Java中的引用区别

    C++的指针和Java中的引用比较像,在作为函数参数传递时,都可以在函数内部改变 "外部" 的值 C++的引用使用时必须是初始化的,他是一段内存的别名,因此也可以在函数内部改变&q ...

  8. linux线程创建 类函数吗,linux多线程创建时使用类成员函数作为参数

    实际上所有线程都是用来处理C函数的,而不是C++类成员函数.标准库中提供一个API函数,这个函数以回调函数指针作为线程的执行代码并在单独的线程中调用回调函数.问题是在这样的线程库中不能创建执行对象成员 ...

  9. 指向 类成员函数 的 函数指针

    原文:http://www.vckbase.com/document/viewdoc/?id=1818 一.成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西.对普通的函数指针来说,可以 ...

最新文章

  1. 使用Python+OpenCV+yolov5实现行人目标检测
  2. matlab设置随机流的种子
  3. vue-resource jsonp跨域问题解决方法
  4. JavaMail可能是邪恶的(并迫使您重新启动应用程序服务器)
  5. android 7.1 apk的systemuid [2]
  6. (转)收集Oracle基础
  7. java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal问题解决
  8. 宏程序自动生成软件_【软件】宏程序自动生成器V3.0下载
  9. linux 查看libevent 安装目录,关于Linux下libevent库的基础安装和使用
  10. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结
  11. 在.net中序列化读写xml方法的总结
  12. 基于OpenCv的人脸识别(Python完整代码)
  13. 卸载抖音和微博的一天……
  14. phpstorm php代码补全,基本代码补全:补全名称和关键字
  15. 串的定义及其基本操作的实现
  16. 网易2018校园招聘第3题
  17. make menuconfig错误——make[2]: *** [scripts/kconfig/lexer.lex.c] 错误 127
  18. 华顺信安 白帽汇安全研究院一面复盘
  19. Oracle DUL Data Unloader数据恢复工具信息汇总
  20. LOB字段相关概念(自动创建LOB索引段和重建索引方法)

热门文章

  1. 20145234黄斐《信息安全系统设计基础》第九周学习总结(课本部分)
  2. 机器学习中的数学-线性判别分析(LDA), 主成分分析(PCA)
  3. 程序包com.sun.image.codec.jpeg.JPEGCo不存在解决办法
  4. [置顶] 归并排序,逆序数
  5. 查看dev下设备名的含义
  6. SpringBoot 实战 (九) | 整合 Mybatis
  7. Python+opencv 图像拼接
  8. BestCoder Round #80 1002
  9. 精华阅读第 10 期 |解开阿尔法狗(AlphaGo)人工智能的画皮
  10. Python+Django+SAE系列教程14-----使表单更安全