1樓:匿名使用者
這是傳引用呼叫,函式呼叫引數的時候不會再拷貝乙個副本。
// 函式呼叫後a 和b並沒專
有達到交換的目屬的(拷貝臨時變數 a, b)int swap(int a, int b)// 函式呼叫後a 和b的值進行了交換(直接作用於 a, 和b)int swap(int &a, int &b)
c++ * a和*&a作為函式的引數時有什麼區別?
2樓:匿名使用者
如果你說的是函式的形參,那麼
void foo(int* ptr);
是傳值呼叫,比如你這麼呼叫
int a;
int* pvalue = &a;
foo(pvalue);
這樣的情況下,pvalue的值是不能被函式foo改變的,也就是pvalue肯定是指向a的。
但是如果你這麼宣告
void foo(int*& ptr);
則是傳遞引用,那麼如果你函式裡面
void foo(int*& ptr)
這樣呼叫過之後,pvalue就變成了null。而第一種情況pvalue是不能被改變的。
引用是c++帶來的很重要乙個特性,他在很多情況下避免了使用指標。而且,在c++裡面,引用是不可以捏造的,比如c你可以很容易弄乙個null的指標,而引用這不存在null引用。
上面的foo函式如果要用c來實現,則必須用指標的指標:
void foo(int** ***r)
呼叫的時候要foo(&pvalue)
這種技術很多用在比如定義乙個安全刪除指標的函式,所謂安全就是,只有當指標為零的時候才執行刪除,刪除之後,立刻把指標賦值為null。
template
inline safe_delete(t*& ptr)
}在c++裡面,能不用指標都應該盡量避免,stl裡面就大量使用引用。
3樓:
樓上答非所問。
*a的「a」是指標變數,其內容是位址,*&a的「a」是變數a或a陣列的首位元組,其內容是資料。
4樓:匿名使用者
;iostream>
using namespace std;
void swap(int a,int b)main()
main()
引用可以看作是乙個變數的別名,使用 引用 時 ,對於void swap(int a,int b) 編譯器並沒有給形參a,b分配新的記憶體空間,只是使 形參a,b指向了main函式中實參a,b的記憶體空間,他們共享同一內空間,即把位址給了形參。所以在void swap(int a,int b)函式中對這塊記憶體的改變也就改變了實參的值。
除了使用引用,也可以使用指標。
指標方式和引用方式都屬於傳址呼叫。
c++函式引數中的"&"號是什麼意思呢?
5樓:匿名使用者
在函式的宣告或定義中,形參帶'&'號,表示形參是該型別的引用型別。所謂引用是乙個變數的別名,這樣對形參的修改會反映在實參上。
比如要實現交換就可以用
void swap(int &a, int &b)在函式的呼叫中,實參帶'&'號,表示取位址運算,結果是乙個指向操作變數的指標。
6樓:匿名使用者
1取位址;
int i=1;
int pi=&i;
2位運算,表求按位與
int a=1,b=3;
int c=a&b;
3引用int a;
int &b=a;//b是a的引用,b等同於a這是 sun_siliang 的答案
7樓:匿名使用者
引用,即給乙個變數取別名,他們還是同乙個變數,就是比如a=0;呼叫 func(a);再函式裡面count++;函式結束後會改變a的值,a這時候等於1.建議去看c++ primer,經典必讀書籍
8樓:匿名使用者
int &count它有什麼功能,
這個函式
傳入的第二個引數是乙個函式位址的引用
count(root->lchild) //而這裡就是呼叫這個函式 目的應該是求根結點左孩子這邊的葉子結點數
9樓:匿名使用者
&本身是取位址符,這裡表示引用,就是建立count的乙個副本,函式中對count物件的修改不影響原傳入的實參
10樓:匿名使用者
引用,建立乙個count的複本,這樣就不會更改你傳遞進來的引數值了,當然如果你想改變的話的應該用指標:int func(int * count)
11樓:匿名使用者
取位址操作符,或者引用,
12樓:
引用 可以修改count
C如何以一維陣列作為函式引數
定義復為指 針,同時傳入制陣列長度 void func int array,int len 不過既然是c 一維陣列都建議用vector了 void func std vector array 在c c 中,在函式引數中,指標與陣列名是等同的。宣告函式引數時這樣 function int arg 在呼...
C怎麼把字元陣列當作函式引數傳遞
以指標方式或數bai組的方式都可以實du現引數傳遞zhi的,實際上都是將dao陣列的首位址傳遞專到子函式中去的。屬例如 include include void fun1 char pstr void fun2 char arr int main c 不能傳陣列,傳bai的是第乙個du陣列zhi元素...
c語言中怎麼用二維陣列作為函式引數
二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大 明,如 它們是合法且等價,也可以使用如下形式 但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯 因為從實參傳遞來的是陣列的起始位址,如果在形參中不說明列數,編譯器將...