请问c语言中引用怎样理解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问c语言中引用怎样理解?相关的知识,希望对你有一定的参考价值。

我一直都不明白引用到底是怎么回事?干什么用,有什么好处?
那么引用应该怎样声明呢?

1、引用的理解

引用是引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。

例如: Point pt1(10,10);

Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。

需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:

pt1.offset(2,2);

pt1和pt2都具有(12,12)的值。

引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才

初始化它。例如下面语句是非法的:

Point &pt3;

pt3=pt1;

2、引用的两个主要用途

作为函数参数以及从函数中返回左值。

(1)引用参数

a、传递可变参数

传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现两整数变量值交换的c程序如下:

void swapint(int *a,int *b)

int temp;

temp=*a;

a=*b;

*b=temp;

使用引用机制后,以上程序的c++版本为:

void swapint(int &a,int &b)

int temp;

temp=a;

a=b;

b=temp;

调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。

b、给函数传递大型对象

当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:

const maxCard=100;

Class Set

int elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值。

int card; // 集合中元素的个数。

public:

Set () card=0; //构造函数

friend Set operator * (Set ,Set ) ; //重载运算符号*,用于计算集合的交集 用对象作为传值参数

// friend Set operator * (Set & ,Set & ) 重载运算符号*,用于计算集合的交集 用对象的引用作为传值参数

...

先考虑集合交集的实现

Set operator *( Set Set1,Set Set2)

Set res;

for(int i=0;i<Set1.card;++i)

for(int j=0;j>Set2.card;++j)

if(Set1.elems[i]==Set2.elems[j])

res.elems[res.card++]=Set1.elems[i];

break;

return res;

由于重载运算符不能对指针单独操作,我们必须把运算数声明为 Set 类型而不是 Set * 。每次使用*做交集运算时,整个集合都被复制,这样效率很低。我们可以用引用来避免这种情况。

Set operator *( Set &Set1,Set &Set2)

Set res;

for(int i=0;i<Set1.card;++i)

for(int j=0;j>Set2.card;++j)

if(Set1.elems[i]==Set2.elems[j])

res.elems[res.card++]=Set1.elems[i];

break;

return res;

2、引用返回值

如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:

double &max(double &d1,double &d2)

return d1>d2?d1:d2;

由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:

max(x,y)+=1.0;

扩展资料

使用c语言中引用的原因

程序按功能划分可分为数值运算、符号处理和I/O操作三类,符号处理程序占相当大的比例,符号处理程序无处不在,编译器、浏览器、Office套件等程序的主要功能都是符号处理。

在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。

C语言中,函数调用的一般形式为:

函数名(实际参数表)

对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。字符函数引用即对引用有关库函数或自定义函数函数。

参考资料:百度百科——字符函数引用

参考技术A C语言没有引用啊,C++才有.

引用能起到指针的部分作用,但是比指针安全.

一个引用可以看作是某个变量的一个"别名"。对引用进行操作就像对原变量进行操作一样。

主要用于函数的参数传递时使用。因为C语言没有类似VB的“传引用调用”这个功能,所以C++的引用填补了这个空白。从此即使需要改动参数,也直接传递一个变量过去即可。这在操作符重载中有更重要的意义。等你学到以后才会明白。

int a; //声明变量a
int& ra = a; //声明一个引用,名字是ra,ra引用了a

注意,ra声明的时候必须同时给出它到底引用了谁
int& ra; //只声明不指明是不对的。

还有,引用一旦声明,就不能再修改到其他变量上了,这与指针不同。
ra = b; //这是不行的,因为已经int &ra = a了本回答被提问者采纳

C语言中,对于不知道长度的数组怎样输入。。。

参考技术A

1、一维数组的定义、引用和初始化:定义一维数组的一般形式:类型名 数组名[常量表达式]。

2、一维数组程序举例:冒泡法。

3、得到结果进行输出。

4、二维数组常称为矩阵。把二维数组写成行列的排列形式,可以形象的理解二维数组的逻辑结构。

5、字符数组的定义,引用和初始化:C语言中没有字符串类型,字符串是存放在字符型数组中的。

6、字符数组综合举例。输出一个菱形。

以上是关于请问c语言中引用怎样理解?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,对于不知道长度的数组怎样输入。。。

C语言和汇编怎样引用对方定义的变量?

C语言和汇编怎样引用对方定义的变量?

请问大牛们怎样在C语言中实现一个timer事件

AUTO在C语言中的用法,下面小程序NUM编译结果是怎样的,该怎样理解?

请问 c语言怎样获取计算机ip地址啊