首页 > 电脑 > 指针形参返回、引用形参、函数值返回 的区别?

指针形参返回、引用形参、函数值返回 的区别?

电脑 2023-10-21

函数形参 引用和指针有什么区别

关于指针和引用的区别,首先要了解变量声明的实质。

先看一个代码

inta=10;

该语句其实是在栈上分配了一块内存空间,整数类变量占用4字节,所以这句代码的意思就是分配了一块连续4字节的内存空间,并往该空间存入10 。a代表着这块内存空间的首地址(简称地址,下同),a是个代名,一个标示符,这个名字只存在于源代码,编译之后就是个地址。

所以当定义一个变量时,一个变量其实包含两个属性,地址(占用内存空间)和值,名称代表地址,而当执行赋值语句时,编译器默认往a代表的地址中存入数据(存入所在内存空间),而不是改变地址。

再看一段代码

inta=10;
int&b=a;

声明一个整数类的引用,名称为b,如果说变量含有地址和值两个属性,那么引用不能称为变量,它不具备自己所代表的内存空间更没有自己的值,它仅仅就是个代名词,它什么都没有,所谓徒有虚名,没有实质,它只是a的一个别名,或者说它是借用了a的地址和值,当对b赋值或其他访问时,等于直接在访问a。编译之后也是a的地址。

再看一段代码

inta=10;
int*p=&a;

这段代码的后一句声明了一个指针变量,并取a的地址赋值给p,既然是变量,它就包含2个属性:地址和值,与其他变量不同,它专门用于保存其他变量的地址(地址是个无符号整数,没见过门牌号码是负的^_^),此处p所在内存空间存入a的地址,当然p同样代表自己的地址。

最后再看段代码

voidmain()
{
inta=10;
int&b=a;
int*p=&a;
fun1(b);
fun2(p);
cout<}
voidfun1(int&c)
{
c++;
}
voidfun2(int*ptr)
{
*ptr++;
}

上述代码中定义完了后先调用fun1,fun1的形参是引用,因此主函数中将b传入fun1,由于是引用,前面说过,引用只是个别名,它本身没有地址空间,因此传入的其实是a的地址。传入后,编译器对引用不做处理,因此在fun1函数体内,执行c++时,其实就是对a的值加一,编译后c其实就是a的地址,这就是引用作为形参的调用情况。

虽然调用fun2,fun2的形参是指针变量,因此主函数中将p传入fun2,由于p是个变量(指针变量),是变量都有自己的内存空间和值(此处p的值是a的地址),对于变量传递,编译器会复制一份值COPY,因此在函数fun2内部,首先为ptr被分配一个内存空间(创建局部变量,函数退出时释放),然后将外部p的值复制到ptr中,也就是a的地址被复制到ptr中。然后执行*ptr++,就是对ptr所指向的地址中的值加一,也就是对a的值加一。函数通过ptr间接对a操作。

总结:

引用作为形参传入函数时,不做任何处理直接使用,而指针作为形参传入函数时,要为形参分配内存空间创建一个临时局部变量,并将实参指针的值复制到形参中。

c++问题:指针形参与引用形参

没那么罗嗦,你只需要认识到:值传递时形参不会改变实参的值, 引用传递时形参可以改变实参的值。 常量引用的方式可以提高函数参数传递的效率,同时又规避了修改实参的副作用。 函数只能有一个返回值,借助引用传递可以实现多个值的返回效果。 顺便提一下,数组在引用传递时必须指定数组下标的大小! 用不用引用是根据你参数传递的需要来定的,绝不依据参数是什么类型或大小。 编译器不会自作主张去选择用引用还是指针进行参数传递,上楼的案例中其实涉及到对临时匿名变量的只能以常量方式引用。 关于C++函数参数传递方式是三种还是两种,指针传递是不是可以看作一种独立的方式,这个问题是在存在争议的,我个人意见认为就运行机制而言

指针与引用的区别,引用作为函数参数时的用法?

指针和引用在被作为参数传递时的区别是: 前者通过对地址的操作进而改变实参 后者是以别名的方式对实参的直接处理达到同样效果。 两者的共同点就是,当实参传进来时,都能改变实参的值 例:(引用) int swap(int& a,int& b); // 函数申明 swap(m,n); //主函数 调用

C++中函数的返回值是什么意思有?什么用? 书上说 引用 和指针有异曲同工之妙,应该怎么用

在声明函数时,就声明了函数的返回值类型和形参类型 返回值就是函数完成一定功能后,可以返回一个相应类型的对象。它可以被主调函数使用 引用是变量的别名,对引用的操作,就是对所引用对象的操作 指针变量,可以通过指针运算符*访问指针所指向的对象

函数指针与指针函数返回值的区别

指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 函数指针是指向函数的指针变量,即本质是一个指针变量。 int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 主要的区别是一个是指针变量,一个是函数。在使用是必要要搞清楚才能正确使用。 我转来的 希望你有用

标签:信息技术 CC++ 函数 编程语言 编程

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18