-
2020-03-28 10:46:04
普通变量是直接传值
指针变量传递地址
引用变量是隐式传地址,如void f(int &x),实际传递的是x的地址p,但是函数内部使用x时会自动变成*p
void f(int &x) {x++}; 会变成
void f(int *p) {(*p)++};更多相关内容 -
变量、指针、引用作函数形参的比较
2019-03-15 12:10:44函数形参是C++函数学习中一大重点,经常让初学者头疼,这里我们通过讲解两个实参值互换的例子讲解实参与形参间的关系,并比较普通变量、指针以及引用作形参时的区别,了解地址、名称以及值间的联系,体会指针、引用... -
C++中变量的引用和引用作函数形参和返回值
2021-03-17 21:57:30表示引用声明符,不表示地址 2.声明一个引用类型变量时,必须在定义时进行初始化,及声明它代表哪一个变量 例如: #include<iostream> using namespace std; int main() { int b; b=10;//赋初值 int &a=...一,变量的引用
1.引用是一种新的变量类型,它的作用就是为变量起一个别名
例如:int b; int &a=b;
注:&表示引用声明符,不表示地址
2.声明一个引用类型变量时,必须在定义时进行初始化,及声明它代表哪一个变量
例如:#include<iostream> using namespace std; int main() { int b; b=10;//赋初值 int &a=b;//引用 cout<<b<<endl; cout<<"-------"<<endl; cout<<a<<endl; return 0; }
二,引用作为函数的形参以及返回值
1.引用作为函数的形参#include <iostream> using namespace std; int main() { void swap(int & ,int& ); int i =7,j = 5; swap(i,j); cout<<"i="<<i<<endl<<"j="<<j<<endl; getchar(); return 0; } void swap(int &a,int &b) { int temp; temp = a; a =b; b= temp;
结果:
i=5
j=7
注:形参是声明的引用,注意这个引用没有初始化,在调用函数时实现了初始化,做到了真正意义变量传递引用和指针做形参是很常见的问题,但是它们在做参数的时候是有区别的
先说一下指针吧,指针他是一个变量,有具体的值,他的值是一个地址。而引用是对一个变量的引用,是变量的别名,并且在引用的时候必须要初始化。
2.引用作为函数的返回值用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本
#include<iostream> using namespace std; float temp; float fn1(float r){ temp=r*r*3.14; return temp; } float &fn2(float r){ //&说明返回的是temp的引用,换句话说就是返回temp本身 temp=r*r*3.14; return temp; }
注:当返回类成员引用时,最好是const引用,可以避免破坏类的成员
-
[C++]指针、引用作函数形参的比较
2019-03-10 22:37:38设计一个函数,调用该函数时,实现整型变量x与y值得互换。如下程序: #include<iostream> using namespace std; void swap(int a,int b){int s;s=a;a=b;b=s} int main(){ int x=4,y=5; swap(x...设计一个函数,调用该函数时,实现整型变量x与y值得互换。如下程序:
#include<iostream> using namespace std; void swap(int a,int b){int s;s=a;a=b;b=s} int main(){ int x=4,y=5; swap(x,y); cout<<x<<' '<<y<<endl; return 0; }
运行结果:
4 5 请按任意键继续 . . .
当我们调用调用函数时,为没有实现实参x与y间值得互换,原因在于当我们调用函数时,首先进行实参与形参间的值得传递,即令a=x,b=y,之后实参的任务完成,被调用函数完成形参a与b间值得互换。
要实现实参x与y间值得互换,可以利用指针与引用:一、指针
利用指针,将形参作为实参的地址,在进行地址中的内容进行互换,就可以实现x与y间值得互换,程序设计如下:
#include<iostream> using namespace std; void swap(int *a,int *b){int s;s=*a;*a=*b;*b=s} int main(){ int x=4,y=5; swap(&x,&y); cout<<x<<' '<<y<<endl; return 0; }
运行结果:
5 4 请按任意键继续 . . .
思考:
下面程序的输出结果是什么?和上面利用指针设计的程序输出结果相同吗?为什么会这样?
#include<iostream> using namespace std; void swap(int *a,int *b){int *s;s=a;a=b;b=s} int main(){ int x=4,y=5; swap(&x,&y); cout<<x<<' '<<y<<endl; return 0; }
二、引用
引用可以理解为为一个数据对象起了一个别名,当我们对一个数据对象的引用作操作时,也就是对该数据对象的操作。因此,将形参设计成实参的引用,就可以实现我们的目的。
#include<iostream> using namespace std; void swap(int& a,int& b){int s;s=a;a=b;b=s} int main(){ int x=4,y=5; swap(x,y); cout<<x<<' '<<y<<endl; return 0; }
运行结果:
5 4 请按任意键继续 . . .
swap函数对x与y的引用做了换值操作,也就是对x与y做了换值的操作。
通过以上程序我们可以看出,引用作为参数最大的好处是既可以像指针那样工作,其使用方式又一般变量相同。引用比指针更具有可读性。
更多精彩内容请关注微信订阅号“编程语言初学者”,我们会将不同网站发布的博客、推文统一发布于编程语言初学者订阅号。
编程语言初学者 -
C++中引用的用法以及将引用作为函数的形参
2019-03-16 04:24:27在C++中引用就相当于是给变量起了一个别名,有点类似于指针,但是与指针又不同。 引用的初始化 int i; i = 10; //变量i的引用 //引用必须在创建的时候就要初始化,而指针可以在任意的时候初始化 //引用就相当于是给...在C++中引用就相当于是给变量起了一个别名,有点类似于指针,但是与指针又不同。
引用的初始化
int i; i = 10; //变量i的引用 //引用必须在创建的时候就要初始化,而指针可以在任意的时候初始化 //引用就相当于是给变量起了一个别名 int& i_r=i; //i_r指向了变量i的内存地址 //我们可以查看地址 TRACE("the addr of i:%d\n", &i); TRACE("the addr of i_r:%d\n", &i_r);
输出如下所示:
我们会发现引用和变量名指向的是同一个地址。引用赋值
i = 30; int i2 = 0; //i_r = &i2; //错误:一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向另外一个对象。 i_r = 25; //i的值也会发生变化
引用作为函数的形参
我定义一个交换函数:
void swap(int& x, int& y) { int tmp; tmp = x; x = y; y = tmp; }
在main函数中调用:
int x1 = 100; int y1 = 200; TRACE("Before swap x1=%d y1=%d\n",x1,y1); //因为形参是引用,所以形参会指向实参的地址单元,这样在函数内部对形参的修改,就会改变实参的值 swap(x1, y1); TRACE("After swap x1=%d y1=%d\n", x1, y1);
输出如下:
函数返回值为引用
在.h头文件定义如下:
int s_i; double d[20]; double& setdouble(int i); int& setint();
实现如下:
double& CmfcusereferenceDlg::setdouble(int i) { return d[i]; } int& CmfcusereferenceDlg::setint() { return s_i; }
在main函数中调用如下:
//练习引用作为返回值 setdouble(1) = 30.0; setint() = 5.0;
我们可以看到成员变量值的变化。
指针和引用的区别:
1.引用必须在创建的时候就要初始化,而指针可以在任意的时候初始化
2.引用一旦初始化指向了一个对象,就不能再指向另外一个对象。而指针可以在任何时候指向另外一个对象 -
C语言中取地址符&做函数形参?—— 引用的讨论
2021-05-21 17:42:04做函数形参?C语言强大且危险引入这个问题花去了整整一天的研究。先看一段严蔚敏的《数据结构》中栈的例程:这里面的&S第一遍看的时候想当然的认为是取了SqStack结构体的S的地址,没有细想。然后又看到了这句。/... -
文件流对象作为函数形参时,需要加上引用符号&
2022-03-08 21:20:45传参数时,需要加引用符号 这种用法仅限于你选哟在多个函数中使用同一个文件流对象时 可能你会觉得可以重新创建一个就可以 这里的用法主要是共享文件流对象在文件中指向的位置(即在上一个函数中读取到的位置,在下... -
举例剖析C++中引用的本质及引用作函数参数的使用
2021-05-21 10:11:25引用的意义与本质1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针2)引用相对于指针来说具有更好的可读性和实用性引用本质思考:思考、C++编译器背后做了什么工作?#include using namespace std;int ... -
深入理解指针作为函数形参
2021-11-27 22:05:22接下来,通过一个简单的例子,来演示一下指针作为函数形参的两个容易混淆的问题。 1)可以改变指针指向的内容: void test(int* s) {//指针作为形参 //s = new int(2);//p指向2这块内存空间 *s = 20;//指针指向的... -
C++中二维数组作函数形参
2017-07-16 12:02:58C++中关于二维数组作为函数参数传递的问题 文章转自:http://www.cnblogs.com/LeeZz/p/5084498.html 在做数据结构迷宫实验的时候,要生成一个二维数组存储迷宫数据,为了保证程序的模块化,将生成部分... -
C语言数据结构中取地址符&做函数形参?
2017-10-16 19:56:03取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究。 先看一段严蔚敏的《数据结构》中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqStack结构体的S的地址,没有细想。然后... -
C++中一般引用作形参和常引用作形参的问题
2018-09-18 17:50:07引用作形参和常引用作形参 一般 引用作形参: 不用作参数传递(实参赋值给形参),节省开销,提高效率。 函数 可以 改变形参的值 实参 不能 是常量 常引用作形参有3个作用: 不用作参数传递(实参... -
C语言中指针数组做函数形参,数组指针做形参
2022-03-09 20:33:54数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针变量,指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。int *p[5]则是一个大小为5且存放整型指针的数组。 那么也可以理解为数组指针... -
C/C++函数形参传实参时值传递、指针传递、引用传递的区别
2016-06-08 10:59:49引用传递:在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。这种方式我觉得是并不常见的,后来证实其实也常用。 下面对三种情况分别举例: 值传递的例子: ... -
C++引用作为函数参数
2021-05-19 06:07:23C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。到目前为止我们介绍过函数参数传递的两种情况。1) 将变量名作为实参和形参这时传给形参的是变量的值,传递是单向的。如果在执行函数... -
结构体作为函数形参的归纳
2021-03-07 18:30:32主要的知识归纳来自于这位博主的CSDN博客:https://blog.csdn.net/tham_/article/details/45370607相当于自己学习他的同时做下的笔记吧将一个结构体变量...用结构体变量的引用变量作函数参数。用实例来说明:1 stru... -
const 和引用作为形参,返回类型,函数类型详解
2019-09-23 13:32:231.临时变量、引用参数和 const声明的形参 在参数传递过程中,如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为 const 引用时,C++才允许这么做,但以前不是这样。如果引用参数是 const... -
c++基础1:指针作为函数形参
2018-06-07 16:47:03指针作为函数形参传入的应用非常广泛,比如:数组名字作为指针传入等等.指针作为形参传入的一大好处就在于可以在函数内部改变指针指向的对象!!!注意,这里的重点是指针指向的对象,而不是改变指针本身.指针和应用作为... -
用指针变量作函数形参接收数组地址
2012-12-15 11:19:41//引用函数 cout排序后的数组为:"; for(i=0;i;i++) //输出函数 cout[i]; cout; return 0; } //排序函数代码 void select_sort(int *p,int n)//用指针变量作形参 { int i,j,t,k; //i的循环(第... -
二维数组作为函数形参该如何传递
2020-05-10 17:49:33今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数...如果要将一个二维数组作为形参,那么函数该怎么声明? 来看《C++ Primer》中给出的方法: 1. 数组名作为形参 [cpp] view plain copy -
二维数组的作为函数形参的地址传递
2016-04-14 23:59:04template void fun(Type* v,Type** m) 在调用的时候 fun(v,(int**)m); -
c语言实参、形参、函数调用、指针、引用、&符号实例
2021-05-22 00:48:56c语言实参、形参、函数调用、指针、引用、&符号实例 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分C C 语言实参、形参、函数调用、指针、引用、语言... -
指针数组做函数形参
2015-04-08 15:57:41从程序设计角度来看,将多个字符串传递给函数处理时,因为传递的是一维数组,形参的定义比较简单。例如,函数strsort()可对多个字符串进行排序,函数头的定义形式如下: void strsort(char *s[],int n) 形参char... -
c语言——指针作为函数形参,改变实参的值的问题。
2021-05-23 21:03:49但是若是函数的形参是指针变量的话在调用函数时将变量的地址传递给指针,在函数内部对函数进行解引用改变指针的值那么相应实参的值也会被更改。这就是所谓的传址传参。这种传参方式可以让函数和函数外边的变量建立起... -
C语言中函数形参与实参的结合方式.pdf
2021-05-22 12:20:04C语言中函数形参与实参的结合方式,c语言形参和实参,c语言中形参与实参,c语言形参实参,c语言中实参和形参,c语言中的实参和形参,c语言函数形参,函数的形参和实参,函数形参和实参,函数形参实参《乌合木齐成人教育学院... -
Go map作为函数参数 (引用传递,修改形参会影响到实参)
2022-04-18 11:05:50demo.go(map作为函数参数,引用传递): package main import "fmt" func main() { // 定义map map1 := map[int]string{1: "张三", 2: "李四", 3: "王五"} fmt.Println(map1) // map[1:张三 2:李四 3:王五] ...