關於函式宣告的問題,為什麼沒有交換呢

時間 2022-12-01 09:01:26

1樓:匿名使用者

swap函式傳進去的引數只是數值,不改變原位址內的資料要想改變需要傳進去位址

可以這樣寫:

void swap (int *x, int *y);

這樣就可以了

2樓:匿名使用者

你寫的函式引數是值傳遞,也就是說呼叫函式時候傳導到裡面的是數值,不是變數,所以不能交換,應該用位址傳遞 具體請你好好研究下位址傳遞和值傳遞的意義就明白了

3樓:匿名使用者

這。。。void swap (int x, int y)函式是無法改變外部變數的,內部變數是臨時的,函式結束後變數釋放。我給你改了一下你理解一下

#include

void swap (int x, int y);

void main ()

void swap (int x, int y)

4樓:匿名使用者

這涉及到形參、實參和引數傳遞方式的問題。你這樣寫是將變數值傳遞進函式,函式體中對形參的操作不會影響到外部變數。要實現你的功能,應當用指標或引用來定義函式形參,如:

void swap (int &x, int &y) //引用呼叫

5樓:式的

需要要對void swap (int x, int y)中的x,y引用

c語言問題…為什麼呼叫函式之後x,y的值沒有交換?

6樓:匿名使用者

要分清形參和實參的區別:

形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回主調函式後則不能再使用該形參變數。

實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。

實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生型別不匹配」的錯誤。

函式呼叫中發生的資料傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。

如上圖中的a,b就是形參,x,y就是實參

7樓:天雨下凡

swap函式交換了a與b的值,但是函式返回時,a與b的值就丟失了,因為a與b是swap的引數,是區域性變數,當swap函式返回時就會丟失,如果要交換,可以傳遞給swap函式引用或指標作為引數。

c語言 關於函式呼叫的問題 ,為什麼第二個函式返回值沒有互換。謝謝

8樓:匿名使用者

你看看c語言中的實參和形參的關係。

另外看一下指標。

第乙個有返回值是因為你不管什麼時候都對同乙個位址進行操作。第二個沒有返回值是因為形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。

函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。

9樓:匿名使用者

第二個呼叫函式 c0 c1 是形參 他從主函式得到實參的值 這裡呼叫函式只交換了c0 和c1的值但是沒有返回給實參所以主函式裡的值沒有交換

10樓:

你傳遞的是值,而非引用,當然不會交換了

11樓:飛絮逐塵

陣列是偽位址傳遞,也就是偽指標,實參的位址發生了改變則相應的值也發生了改變,而值傳遞的交換只是形參的值發生了交換,隨著這個程式執行完畢就自動釋放了,實參並沒有發生改變

12樓:電子劍客

第乙個傳遞的是指向陣列的指標,第二個傳遞的是引數的副本

13樓:匿名使用者

應該是釋放了,你在swap2裡面加一句printf看看是不是換了,應該是來swap2換了,出來後在main裡就釋放了

c++程式中 交換兩個變數的值,為什麼結果沒有交換呢

14樓:匿名使用者

樓主,你把函式定義放在main()前邊試試,**如下。

#include

using namespace std;

void swap(int &,int &);

int main()

void swap(int &a,int &b)

15樓:匿名使用者

你的程式應該沒有錯誤啊,重新編譯執行一遍,如果可以的話換個編譯器試試

上面的解釋有問題,函式宣告放在**只是個程式設計規範的問題,不會導致錯誤的

16樓:匿名使用者

#include

using namespace std;

int main()

void swap(int * a,int * b)/*執行結果

------

i=5 j=3

--------*/

17樓:匿名使用者

我執行了一遍,成功交換了啊,沒有問題啊

c語言交換兩個數的值,函式宣告問題。

18樓:關注

3全部編譯器沒報錯但是有提示

warning c4047: 'function' : 'int' differs in levels of indirection from 'int *'

只要不影響執行,編譯器都不會報錯

另外即是宣告有錯結果依然是對的

#include

void swap(int,int);

int main ()

int number1=3;

int number2=4;

swap(&number1,&number2);

void swap(int *p1,int *p2)int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

c語言,函式來交換兩個數值,為什麼我執行的結果兩個數值沒有交換?

19樓:牢思語

你的交換函式中的變數只在交換函式中有效,所以沒辦法影響函式外的變數,應該傳指標

20樓:匿名使用者

你這是按值傳遞

swap(&a,&b);

void swap (int *n,int *m)

21樓:黑夜不是我

你交換的只是swap函式內的區域性變數n,m值,應該改成這樣#include

void swap (int *n,int *m)void main()

注意函式形參的傳值和傳位址的區別

22樓:做而論道

這函式,確實不能轉換。

上面程式中函式swap()本來是想將兩個數的值相互交換,但結果為什麼沒有交換?

23樓:

這個關鍵還是要搞明白形參和實參的問題,你把x y 的位址傳進去之後, 在swap裡面修的是指標的值,相當於把指標指向了另外乙個地方,並不會修改指標指向的內容, 這個地方修改的話

int *swap(int *a,int *b)

24樓:

int *swap(int *a,int *b)

沒有答案的問題,為什麼沒有答案

這個問題至今沒人能答得上來!比如說,一座房子 乙個蘋果,你知道 多少嗎?曾經有個人花了十年時間,用了幾層樓的搞紙還是沒算出來呢!答案 兩個相愛的才有永恆的存在 你的問題不是說是沒有答案的問題嗎?那怎麼還要問啊。不過你的問題還是被本小姐研究出了個答案哦。要給本小姐加分哦,嘻嘻 開爾文 k 是熱力學溫度...

關於袁崇煥的問題,為什麼對於袁崇煥的爭議那麼大

樓主,袁崇煥確實給魏忠賢建過生祠,這是由歷史記載的 巡撫袁崇煥疏頌魏忠賢功德請與寧遠建祠 大明熹宗實錄 卷三十八 天啟七年四月 第4022頁 袁崇煥是給魏忠賢建過生祠?因為太多人給魏建祠,再鐵的漢子也只有軟的份了。居然有人不知道袁為魏立過生詞。我寒 袁崇煥申請為魏忠賢建祠,但被魏忠賢拒絕了 有人整天...

關於說WOW無法超越的問題,為什麼魔獸世界一直無法被超越

是這樣的,在wow出現之前,國內沒有出現過真正的3d網路遊戲,wow的到來,給廣大玩家帶來的衝擊很大,但是隨著技術進步,有很多後來居上者,說wow無法超越,是說她給大家帶來的精神震撼是無法超越的,而不是遊戲技術本身。說的通俗點,wow有點像初戀,羞澀 質樸,講的是第一次的給你帶來的感覺 而後來居上的...

關於上司公司年報,年度每股收益的問題為什麼季度相加

因為季度的每股收益都是企業自己計算每股收益的 全年的每股收益是企業計算後外部審計機構審查的 如果審計發現企業計算的每股收益公式有誤,會進行資料調整 而審計只審查全年資料,不會去審計季度的,也沒那個精力 企業發現季度的計算錯誤之後,不會對以前已經披露的資料重新進行調整的,那不等於告訴全社會他們計算錯誤...

關於電容電壓不能突變的問題,為什麼電容的電壓不能突變和為什麼電感的電流不能突變

你這是兩個概念的問題,不能混淆在一起。首先,所謂的電容電壓,沒有 左端電壓 右端電壓 的說法,電容電壓指的是左右兩端的電位差,其差值就是電容電壓。在開關合上後,c的左端受電場力的作用而聚集正電荷 右端聚集負電荷,電荷逐漸累積,形成c上的電壓 其次,假如原來電容沒有儲存電荷,在s合上後的瞬間,電容兩個...