當前位置:首頁 » 參考文獻 » 函數參數引用

函數參數引用

發布時間: 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