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

形參引用

發布時間: 2021-03-13 20:57:08

㈠ C語言形參和實參,傳值調用和引用調用的區別

形參與實參:
int a(int x){//這個x就是形參,就是你定義的變數名稱
......
}
int main(){
int y=5;
a(y);//具體專的變數y就是實參
a(z);//z也是實參,就是實實在屬在的值
}
傳值調用和引用調用:
二者的區別為,當傳引用時,實際傳到函數中的形參,是實際參數的一個引用,而不是僅傳遞值到函數中。具體的表現有以下幾條:
1、傳引用時,形參和實參是同一個變數,即使用相同的內存空間,二者有相同的地址。而傳值時二者地址不同;
2、傳引用時,由於沒有新建變數,所以對於類對象參數,不會產生構造和析構。而如果是傳值調用,調用時會進行構造,退出函數時會進行析構;
3、由於傳引用使用的是原本實參的地址,所以對引用參數值的修改,會在退出函數後體現在主調函數中,而傳值調用對參數的修改不會影響到主調函數。

㈡ 什麼時候用指針形參什麼時候用引用形參

標准 C 中是沒有引用形參的,只能使用指針形參。
C++ 引入指針形參是為了降低指針靈活性帶來的風險,指針形參不僅可以將數據的引用傳入函數,還可以在函數內改變這個指針,也就是說在函數內部可以改變調用域的變數(而不僅僅是對象)。
相比起引用,指針有這些特點:
指針變數可以被重復賦值或更改(引用則不行,一經賦值不能再改)
指針變數可以為空(引用必須指向具體對象)
如果你用不到這些特性反而覺得它們會帶來麻煩,而且可以接受非 Pure C(例如不需要支持 Objective-C 等其他 C 的超集),那麼就用引用參數吧,甚至還可以在需要的情況下加 const 進一步約束。

㈢ C++中引用做為形參的作用是什麼就是普通的不行嗎

引用是地址傳值,作為引用的形參數值被修改的同時,也修改了對應實參的值。
你不用引用當然可以,只是實參的值不會隨著形參被修改。
引用還有另外一個作用,聲明這個變數的時候不會浪費額外的內存空間,對引用的形參的操作實際就是對實參的操作。

㈣ 形參與實參,到底是哪個引用的哪個

VB的話有兩種方式傳遞值,一個是傳地址,一個是傳值。
變數在內存中存儲的方式就好比一個街道上的許多房子,每個房子都有門牌號,房子里的人就相當於變數。
你找人的的話肯定先是找門牌號,然後才能找到你要找的人。這里的門牌號就是變數存放的地址,人就是變數。知道這些的話那在說傳值你就明白了。
傳地址:這么說吧,就相當於一個共享文件夾,而且你的許可權很高,可以對其中文件進行任意修改,修改後別人看到的話也是你修改後的文件

傳值:這里也可以當做共享文件夾來理解,但是你的許可權很低,不能對其修改,所以你只能把文件拷貝出來用,而不能任意修改。

講到這里你應該知道傳值和傳地址的區別了。傳值不會改變實參的值,而傳地址會改變實參的值

實參里的值傳給形參,
可以算實參調用形參吧。

因為函數里 的形參是動態變數,只有在實參數值傳遞調用的時候才會分配空間。

純手打。不過應該講的也算詳細了。

㈤ 形參實參,指針引用

如果HL是指針則:

定義時
void InitList(LNode &HL)
應該這么用
InitList(*HL);
注意上面的*不是表專示指針,而是表示取HL所指向的內容屬。

定義時
void InitList(LNode *HL)
則應該這么用
InitList(HL);

但這只是單純的從語法來回答你的問題的,對於你這個函數,我想函數的意圖是初始化一個鏈表,並且頭結點HL初始為NULL。
那麼你這里的參數HL就必須是個指針的引用或指針的指針了。
否則
void InitList(LNode &HL)
的形式調用InitList(*HL)時會報錯(訪問無效地址)
void InitList(LNode *HL)
的形式調用InitList(HL)時HL還是會為NULL(值傳遞,頭結點沒有返回出來),而產生內存泄漏。

㈥ 引用形參

你的理解基本正確

phone是自定義的類型,比如自己定義的一個結構體,類等
其實int這樣的類型也是自定義的類型,只不過是程序定義好的
我們使用的時候可以直接使用而已,本質上和我們自定義的類phone沒有什麼區別

㈦ 形參里帶引用操作符的函數,實參應該怎樣設置

int func1(const int & a);
解釋上面的函數func1的定義:
1.第一個int表示此函數的返回值類型
2.func1表示此函數的函數名稱
3.const int & a中的const表示傳過來的實際參數a,不能被函數內部修改.
4.const int & a中的int 表示傳過來的實際參數是int類型的數據
5.const int & a中的&表示傳過來的實際參數是以引用方式傳遞

你的int WaitMessage(const CKBehaviorContext& behcontext); 中的CKBehaviorContext當然就是數據類型,behcontext當然為參數名稱;

舉例說明;
int func1(const int & a)
{
a = 3;//此句是錯誤的,因為有const修飾的變數,在這里不能被修改.編譯時會報錯
return a;
}

如果不加const的話,就可以修改了.

int func1(int & a)
{
a = 3;
return a;
}

我們假設現在定義一個變數b
int b=5;
然後調用func1
func1(b);
這個時候b的值為3;因為b的值被修改了.

引用傳值跟傳指針,很相近.只是引用傳值,使用起來更直觀.沒有使用指針那麼麻煩.

㈧ c++ 形參與實參,引用

記住:函數全是值傳遞。。參數都是 傳遞原變數的值的一個 拷貝。不過你要弄明白傳遞的是什麼值。
a,普通變數時值傳遞,嗯,沒問題。你不能改變原來變數的值。
b,如果是指針,是地址的一個拷貝,其實也是值傳遞(地址的值傳遞)。你不能改變原來變數(地址)的值,但能(其實不是一定能)改變這個地址指向的內容,即所謂的實參被改變了。。。
c,如果是引用,傳遞的也是一個地址,不過這個地址又解析過了的,所以能直接用,不用再加*去解析(地址值傳遞,用時已經解析了)。改變值同指針一樣,不過不能改變地址就更明顯了(引用其實是一個解析了的const 指針)
1,值傳遞,而且不能修改原來的值。分配了空間。
2,你是指 char* p=0; char* &p2=p;樣子么?對的,能這樣子,這時你用p2就和用p一樣了,表達的意思就是作為參數傳遞,你能改變參數的值了,就是能改變實參指針的地址了。。。。而且函數有時需要傳參數改變地址,參數就可以 char* &p2這樣子(也可以char** 不過要解析地址後用)。然後就可以在函數裡面修改地址,然後原來那個指針(即指針的值(地址))就被改變了。其實原理和我上面說的一樣。不過有多重*

㈨ C語言形參和實參,傳值調用和引用調用的區別

int a(int x){//這個x就是形參,就是你定義的變數名稱

.........

}


int main(){

int y=5;

a(y);//具體的變數y就是實參

a(z);//z也是實參,就是實實在在的值

}

#include<iostream>
usingnamespacestd;
voidswap(inta,intb)
{
inttemp;
temp=a;
a=b;
b=temp;
}
main()
{
inta=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(inta,intb)中的形參a,b單獨分配內存空間,並接受主函數傳遞來的值,這塊內存空間和main()函數中的a,b不是同一內存空間。所以在swap(inta,intb)中a,b發生了交換,但main函數中a,b沒發生交換。即主調函數與被調函數的操作對象各不相同,參數僅在調用時由實參向形參傳遞,而不可由形參向實參傳遞。

要使a,b發生交換需要使用傳址調用。程序改為如下:
#include<iostream>
usingnamespacestd;
voidswap(int&a,int&b)
{
inttemp;
temp=a;
a=b;
b=temp;
cout<<"in『swap』:a="<<a<<",b="<<b<<endl;
}
main()
{
inta=3,b=5;
cout<<"before『swap』:a="<<a<<",b="<<b<<endl;

swap(a,b);
cout<<"after『swap』:a="<<a<<",b="<<b<<endl;
}

引用可以看作是一個變數的別名,使用引用時,對於voidswap(inta,intb)編譯器並沒有給形參a,b分配新的內存空間,只是使形參a,b指向了main函數中實參a,b的內存空間,他們共享同一內空間,即把地址給了形參。所以在voidswap(inta,intb)函數中對這塊內存的改變也就改變了實參的值。
除了使用引用,也可以使用指針。

指針方式和引用方式都屬於傳址調用。

㈩ 什麼是引用參數

值參數:(傳復值)傳值給制參數,是最普通
普遍
的參數傳遞方法
引用參數:(傳址)說白了
傳變數給它(或者說
傳給了過程變數的地址)。
比如
sub
a(byref
refin
as
integer)
refin
=
refin
+
1
end
sub
dim
t
as
integer
t
=
2
a
t
'a(t)
msgbox
t
'顯示3
因為上一句話
我們傳了變數給它
而過程中它執行了變數+1,這個變數就帶出來了

熱點內容
塗鴉論文 發布: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