当前位置:首页 » 参考文献 » 函数参数引用

函数参数引用

发布时间: 2021-03-10 16:22:41

『壹』 C语言中函数参数传递问题:引用传递。

参数3中传递方式.
值传递,址传递,
引用传递.
后两者
才是对传入的参数的实际操作.
第一个是
操作的
传入参数的拷贝副本.

『贰』 标准C++中 函数参数为引用时 字面值能作为实参吗

想使用常量做为
实参
,必须是const
引用
,比如写成这样就可以:
template<typename T>
void List<T>::add(const T &n) { };

『叁』 C++中传值参数和引用参数怎样区别

旧事重提,看以下例子:
#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
这个例子是传值调用, 意思就是 形参 的 改变不会影响 实参的值。
你运行一下可知 主函数调用了swap函数后 a,b的值并没有发生交换。
原因是,调用swap函数时 编译器为 swap(int a,int b) 中的形参 a , b单独分配内存空间,并接受主函数传递来的值,这块内存空间和 main()函数中的 a ,b 不是同一内存空间。 所以在swap(int a,int b) 中 a , b发生了交换,但main函数中a , b没发生交换。即主调函数与被调函数的操作对象各不相同,参数仅在调用时由实参向形参传递,而不可由形参向实参传递。

要使a ,b发生交换 需要使用传址调用。程序改为如下:
#include<iostream>
using namespace std;
void swap(int & a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<"in ‘swap’:a="<<a<<",b="<<b<<endl;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;

swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}

引用可以看作是一个变量的别名,使用 引用 时 ,对于void swap(int a,int b) 编译器并没有给形参a,b分配新的内存空间,只是使 形参a,b指向了main函数中实参a,b的内存空间,他们共享同一内空间,即把地址给了形参。所以在void swap(int a,int b)函数中对这块内存的改变也就改变了实参的值。
除了使用引用,也可以使用指针。

指针方式和引用方式都属于传址调用。

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

指针是用来指向某个变量,而引用是给变量取个别名,其作用就如同typedef一样。
用引用作形参时在调用函数里就像操作实参一样,不需要考虑实参的地址问题
用指针做形参时,由于指针的值是变量的地址,所以要通过对地址解引用来操作其所指的变量。
在C++里优先选择引用类型作为形参,因为操作一个变量比操作一个指针要简单的多
但用指针作为形参的好处是它可以通过自增或自减改变它的指向。
温馨提示:建议调用函数时,用引用类型的形参!

『伍』 将“引用”作为函数参数有哪些特点

(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用*指针变量名的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。

『陆』 引用作为函数的参数有什么优缺点

使用引用传参的话来,在函数自中对该变量所做的修改,在函数返回后依然存在。这未必是程序员所希望的。

『柒』 函数的形参在定义是定义为了引用,那么调用时传参该如何传

很多抄书上说的“按值传递”,袭理解这个按值传递就知道怎么传递参数了,所有的参数传递是“按值”传递只是这个值是参数的数值(例如a=10中的10)还是参数本身的地址值(如a=10中的a的地址值),这两种值都可以作为参数调用。
具体该以何种方式传送,还得看在函数定义的原型中怎么定义的。

『捌』 C语言 带参数函数的引用调用

1、C语言调用函来数就是先定义并自声明函数,之后再根据定义函数的格式调用。
2、下面举例来说明函数调用方法:
#include<stdio.h>
int fun(int x, int y); // 函数声明,如果函数写在被调用处之前,可以不用声明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
// 自定义函数fun
int fun(int x, int y) // 函数首部
{ // {}中的语言为函数体
return x>y ? x : y; // 返回x和y中较大的一个数
}

『玖』 c++ 模板函数 函数参数运用引用

引用more effective c++ 中的解释:
指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。
首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时应该把变量声明为指针,因为这样可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如的设计不允许变量为空,这时就可以把变量声明为引用。
char *pc = 0; // 设置指针为空值

char& rc = *pc; // 让引用指向空值

这是非常有害的,毫无疑问。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生),应该躲开写出这样代码的人除非他们同意改正错误。如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一个引用指向空值的可能性。

因为引用肯定会指向一个对象,在C里,引用应被初始化。

string& rs; // 错误,引用必须被初始化
string s("xyzzy");
string& rs = s; // 正确,rs指向s

指针没有这样的限制。
string *ps; // 未初始化的指针
// 合法但危险

不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。

void printDouble(const double& rd)
{
cout << rd; // 不需要测试rd,它
} // 肯定指向一个double值

相反,指针则应该总是被测试,防止其为空:

void printDouble(const double *pd)
{
if (pd)
{// 检查是否为NULL
cout << *pd;
}
}

指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。

string s1("Nancy");
string s2("Clancy");

string& rs = s1; // rs 引用 s1
string *ps = &s1; // ps 指向 s1
rs = s2; // rs 仍旧引用s1
// 但是 s1的值现在是"Clancy"

ps = &s2; // ps 现在指向 s2;// s1 没有改变

总的来说,在以下情况下应该使用指针,一是考虑到存在不指向任何对象的可能,二是需要能够在不同的时刻指向不同的对象。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。
还有一种情况,就是当重载某个操作符时,应该使用引用。最普通的例子是操作符[]。这个操作符典型的用法是返回一个目标对象,其能被赋值。
vector<int> v(10); //建立整形向量(vector),大小为10
//向量是一个在标准C库中的一个模板(见条款35)
v[5] = 10; // 这个被赋值的目标对象就是操作符[]返回的值

如果操作符[]返回一个指针,那么后一个语句就得这样写:

*v[5] = 10;
但是这样会使得v看上去象是一个向量指针。因此会选择让操作符返回一个引用。(这有一个有趣的例外,参见条款30)
当知道必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针 。

『拾』 请问怎么在类中引用函数参数

下面是一个小例子。
文件test.m的源代码如下:
function
test
%
测试函数disp('按值传递参数,调用函数后,应有p=1');p=1;parameter_by_value(p);
disp(p);
%
p=1
disp('按引用传递参数,调用函数后,应有p=2');
p=parameter_by_reference(p);
disp(p);
%
p=2disp('按引用传递参数,调用函数后,应有p1=2,
p2=4,
p3=6');p1=1;p2=2;p3=3;[p1,p2,p3]=multi_parameter_by_reference(p1,p2,p3);
disp([p1
p2
p3]);%----
以下为几个子函数
----------------function
parameter_by_value(p)
%
按值传递参数
%
函数内部改动参数p,函数外p的值应该不变
p=2*p;function
p=parameter_by_reference(p)
%
模拟按引用传递参数
%
函数内部改动参数p,函数外p的值也会变。

热点内容
涂鸦论文 发布:2021-03-31 13:04:48 浏览:698
手机数据库应用 发布:2021-03-31 13:04:28 浏览:353
版面217 发布:2021-03-31 13:04:18 浏览:587
知网不查的资源 发布:2021-03-31 13:03:43 浏览:713
基金赎回参考 发布:2021-03-31 13:02:08 浏览:489
悬疑故事范文 发布:2021-03-31 13:02:07 浏览:87
做简单的自我介绍范文 发布:2021-03-31 13:01:48 浏览:537
战略地图参考 发布:2021-03-31 13:01:09 浏览:463
收支模板 发布:2021-03-31 13:00:43 浏览:17
电气学术会议 发布:2021-03-31 13:00:32 浏览:731