本文目錄一覽:
請問c語言中引用怎樣理解
引用的理解如下: 引用能起到指針的部分作用,比指針安全。引用可以看作是某個變數的一個別名。對引用進行操作就像對原變數進行操作一樣。主要用於函數的參數傳遞時使用。需要改動參數,直接傳遞一個變數過去即可。在操作符重載中有更重要的意義。
C語言中引用指的是什麼,舉個例子
C語言裡面沒有引用的說法,只有C++裡面有。C++里引用就是給變數定義一個別名,操作這個別名就是操作原變數。
比如,我們定義一個引用:
int a=10; //定義一個普通變數
int ref=a; //定義一個變數a的引用
ref=20; //這裡對ref進行操作其實就是對a進行操作
變數主要是在參數傳遞的時候非常有用,當你的函數參數是一個值參數的時候,我們一般的做法是傳遞一個指針進去,這樣就導致我們在函數里操作的都是指針,這樣其實很不方便,如果使用引用的話就可以非常方便。
比如定義一個參數是引用的函數
void func(int b)
{
b++;
}
//調用
int a=100;
func(a); //調用的時候直接傳遞參數進去
上面的方式可以實現和指針一樣的效果,但是更加方便
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;iSet1.card;++i)
for(int j=0;jSet2.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;iSet1.card;++i)
for(int j=0;jSet2.card;++j)
if(Set1.elems==Set2.elems[j])
{
res.elems[res.card++]=Set1.elems;
break;
}
return res;
}
三、引用返回值
如果一個函數返回了引用,那麼該函數的調用也可以被賦值。這裡有一函數,它擁有兩個引用參數並返回一個雙精度數的引用:
double max(double d1,double d2)
{
return d1d2?d1:d2;
}
由於max()函數返回一個對雙精度數的引用,那麼我們就可以用max() 來對其中較大的雙精度數加1:
請問c語言中引用怎樣理解?
是引用類型嗎?C語言中沒有引用類型,引用類型是C++的,意思是為已有變數起一個別名。如int a,b=a;,就定義了b是變數a的別名。通俗點說,可以理解為a、b是同一個變數的不同符號而已。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256773.html