C 定義函式,有引數,實現對實參值的交換,用指標和引用2種方式實現

時間 2021-06-25 15:02:13

1樓:

**如下:

void cmp(int &a, int &b)

void cmp(int *a, int *b)

2樓:飲冰軒者

#include

main()

這是引用,指標和這個差不多;

#include

main()

這是指標,求採納

3樓:

void swap1(int *a,int * b)//指標

void swap2(int &a,int &b)//引用

4樓:厚布凡

第二和第三的作用主要是為了解決等效

形狀的引數中所涉及的問題,作為一個例子來說明一個簡單的程式無效mswapa(int a,int b); / /這兩個函式交換,b值

無效mswapb(一和二);

() 無效mswapa(int a,int b)無效mswapb(一,詮釋及b)

/ /結果是

雖然兩個函式交換一個的b值

mswapa(int,int b)引數沒有被引用,所以mswapa(int,int b)產生兩個臨時物件a和b,是您的main()函式定義一個,b的值賦給兩個臨時變數,mswapa只是這兩個臨時的物件交換價值(int a,int b)

所以法院《一個<<“”<< b << endl結果沒有交換br /> msapb(int&,int&b)與參考它直接給你在main()定義一個b值?交換這兩個變數,所以法院《了“”“<

c++中使用指標、引用進行引數傳遞

5樓:匿名使用者

傳遞變數值抄交換是將變數ab的值傳襲給另外兩個變數cd(例bai子中還是ab,但它是

duswap函式新申請的變數zhi,與主函式的不是同dao一個),交換的只是cd的值,所以原ab的值不變,而傳遞指標則是將主函式ab的指標(即ab的地址)傳給swap,所以swap交換的是這兩個地址中的資料,這兩個地址就是指向原ab的所以可以交換。

比如說有四個房子1234地址是(abcd),第一種是把12房子的東西搬到34中,再交換34中的東西,後面兩種直接是把地址為a和b的兩個房子裡的東西交換。

6樓:匿名使用者

傳普通數值抄到函式中,函式對形參進行改變不會影響到主函式中的資料

傳指標方式,並且通過指標變數對指標所指的地址中的內容進行改變時,會同時改變主函式中的實參所對應的資料, ( 但如果改的只是指標變數本身的值,則沒有影響!! )

引用方式相當於給實參取了個別名,操作哪個變數都相當於操作實參,所以,一變都變。

7樓:天馬行空

c++中函式傳值有兩種方式,一種是傳值,還有就是傳遞引用(指標)。內傳值實際上是把實參的容值拷貝過去,所以對原來的值沒有影響。

而傳遞指標雖然也是拷貝過去(拷貝的是指標值,不是拷貝指標指向的數,你會發現傳遞指標的話形參實際上是實參的地址,和直接傳值方式形參是不一樣的),但是你賦值後會把指標指向的值給替換。你會發現你僅僅想改變指標本身的值還是做不到的,但是這樣你可以改變指標指向的值了,而改變不了指標本身其實就和第一個例子一樣的道理,因為傳遞的是拷貝過去的指標值,如果你想改變指標本身的話,就要傳遞二級指標。

所以在c++裡邊提倡用引用代替指標作為形參,用引用**簡潔易懂,不容易出錯。引用可以理解為實參的別名,你改變它就會改變實參的值。可以把引用理解為const指標。

8樓:匿名使用者

第一張圖,你只是來傳源入一個引數,只是一bai個值,就是在main函式裡定義的du,在swap函式裡面是zhi有進行參值的dao改變,而函式結束後,參形並不能改變實參,所以值沒有變。你第二和第三張,傳入的是兩個實參的地址,把地址裡的內容進行交換,就是兩個值,而改變後的值在放入地址裡面,所以有改變值。簡單點講就是第一張只是值的改變,但地址的內容沒變,第二第三直接是地址裡的內容進行改變。

9樓:網三傻

形參值的改來變不會引起實參

改變源,引用和指標可以改變實參的值。這麼說能懂嗎?也就是第一個中,改變的僅僅是swap函式裡的a和b,並沒有改變主函式下的a和b。

第二個和第三個,使用了指標和引用,都改變了原來主函式的a和b。

10樓:匿名使用者

第一個傳參到swap中是新的變數,swap交換的是新的變數,不是引數,下面兩個通過指標或者引用是同一個變數,改變的是原來引數

c++ “陣列可以通過值引數和引用引數兩種方式傳遞給函式”的說法對否?

11樓:匿名使用者

不對。int,char或者自定義的類可以通過值引數和引用引數兩種方式傳遞給函式,陣列不行。

陣列是兩種指標傳遞:

void sort(int *a); //對於指標a來說是值傳遞,對於陣列來說是指標傳遞

void sort(int a[100]); //這種方法類似於引用,但實質上還是指標傳遞

12樓:謝3哥

當然對了

1,引用 int aaaa(int& a);

2,值 int bbbb(int b);

對勾函式求單調區間,對勾函式的影象 定義域 值域 單調性

x 0的情況下用均值不等式 y x k x 2根號 x k x 2根號k k 0 等號成立 x k x,x 根號k 所以,0 根號k 單增 x 0,由y是奇函式 根號k x 0單減,x 根號k 單增單增區間 無窮大,根號k 和 根號k,無窮大 單減區間 根號k,0 和 0,根號k 維 他命 y ax...

c 中在類中定義另只有帶引數建構函式的類的物件,編譯通不過

在b中定義 a a 是可以通過的,但在其他地方 比如函式中 這樣是不對的。在b中定義 a a 只是告訴編譯器 b有一個a類的物件 並不在定義的時候建立a這個物件成員,也就不考慮它的建構函式。a這個物件成員的建立是在執行b的建構函式時進行的,b的建構函式後面必須以初始化表的形式為a物件成員提供引數,比...

C中如何繼承帶有引數的建構函式,請教c 有參建構函式繼承的問題

返回型別一致,引數型別一致,直接呼叫就可以 請教c 有參建構函式繼承的問題 老游擊隊員 注意看父類a的構造方法是帶一個引數的int型所以你baes no 的時候會根據你no的型別選擇父類的建構函式,如果沒有找到匹配型別就報錯,例如 你base s s是string型別,而父類裡面又沒有傳string...