c中引用的作用
❶ C语言如何表示C++中的引用&
引用是C++中新引入的概念,用符号&表示,它是对象的一个「别名」,就像我们的「外号」一样,它指向的是对象本身,不占用对象的存储空间。
而指针呢,则本身是一个变量,是需要分配存储空间的,里面存储对象的地址,通过指针变量拿到对象地址,通过对象地址就能访问、操作对象,所以引用和指针都可以访问对象,作用是类似的。
C语言和C++中都有指针。
C语言中没有引用&这种概念,也就无谈如何表示它,在需要访问对象的地方,比如将对象传入函数中进行处理,C语言中直接用指针就行了: LinkList * l,C++中可以用LinkList * l 或LinkList & l,它们的效果都是一样的,在函数体内对行参的操作都会改变函数外当实参传递的值。
❷ c++中引用的好处有什么呢 - C / C++ -
引用主要是在对对象、容器对象引用时才会体现他的优越性。比如传递参数为一个容器内对象引用,就不必再像按值传递那样,复制一个传递的对象,直接对该对象就行操作。这个要自己在实践中慢慢体会。
❸ C语言版的数据结构中为什么都用了引用呢
首先说明抄早期C语言标准中没有引袭用的概念,所以以前讨论引用的问题只是在C++中。
但是c语言c99标准中确实又把引用加入了c语言的范围内.不过现在一般的编译器不支持c99标准.
如果是学习数据结构的话,你只用理解引用的作用就行了.
引用可以被认为是一个变量的别名,引用在定义时必须指定其所引用的原变量且不可以修改。
与指针的关系,可以认为引用是一个不需要逆向引用(*)就可以对变量进行访问的常量指针。
简单例子:
int a=5;
int &ra=a;
int *pa=&a;
则下面的操作是相同的效果
ra=3;
*p=3;
❹ C语言中函数调用的作用
使程序模块化,结构更清晰,不同的函数有不同的功能,从而使一个庞大的程序可以分块实现各个功能,编写简单,易懂。
❺ C++中引用做为形参的作用是什么就是普通的不行吗
引用是地址传值,作为引用的形参数值被修改的同时,也修改了对应实参的值。
你不用引用当然可以,只是实参的值不会随着形参被修改。
引用还有另外一个作用,声明这个变量的时候不会浪费额外的内存空间,对引用的形参的操作实际就是对实参的操作。
❻ C#中如何实现和C语言中引用一样的功能
那你可以用来out或者ref。
protected void Page_Load(object sender, EventArgs e)
{
int value = 0;//初始值源
Test(ref value);
Response.Write(value.ToString());//值被改变,结果是9999
Response.End();
}
protected void Test(ref int value)
{
value = 1;
}
不知道合不合你胃口。。。
❼ c语言问题,什么叫引用啊
引用(reference)是c++对c语言的重要扩充。
一、引用的概念
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。
例如: Point pt1(10,10);
Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。
需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:
pt1.offset(2,2);
pt1和pt2都具有(12,12)的值。
引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才
初始化它。例如下面语句是非法的:
Point &pt3;
pt3=pt1;
那么既然引用只是某个东西的同义词,它有什么用途呢?
下面讨论引用的两个主要用途:作为函数参数以及从函数中返回左值。
二、引用参数
1、传递可变参数
传统的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函数。
2、给函数传递大型对象
当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的
副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:
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==Set2.elems[j])
{
res.elems[res.card++]=Set1.elems;
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==Set2.elems[j])
{
res.elems[res.card++]=Set1.elems;
break;
}
return res;
}
三、引用返回值
如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:
double &max(double &d1,double &d2)
{
return d1>d2?d1:d2;
}
由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:
❽ C语言*和&的引用
C语言*和&的引用,*是作用于一个指针,意为取指针所指单元的值;&是取一个变量的地址。
❾ 为什么C语言中可以用引用 啊
1 引用类型是C++提供的,C语言之所以能够使用是因为其使用的C++编译器且源文件后缀是版.cpp
2 分析权
cpp即C++(C Plus Plus),是C++程序的源文件。若是将源文件后缀改为.c,则引用类型是不可以使用的,如下图,源文件为source.c
3 扩展
由于C++对C几乎完全兼容,所以大多数人们都选用C++编译器来写C程序
❿ c++中的引用(&)到底都有什么用处
比如int f(int a){...}
当你如下调用时:
int b;
f(b);
编译器会把b的值赋给a,在函数体内操作a;
而如果函数定义为:int f(int& a){...}
当你调用时,没有这个赋值的过程,因为此时a是实参的别名,相当于直接操作了实参b;
从这个例子可以看到引用的两个特性:
1 节约空间,少了一个实参赋值给形参的过程
2 可以直接操作实参,而不是形参
你说的面向对象中的节约内存,就是第一个特性,因为类对象往往很大,如果赋值方法进行函数调用的话,会增加开销。