為什麼被調函式中值已經交換但輸出時還是主調函式中的順序

2025-06-07 09:30:56 字數 3544 閱讀 4900

1樓:網友

在呼叫函式衝盯中是不能改變主函式里面的值的順序的。

這是c語言或相關語言的基本語言,呼叫函式中的數值的有效期只在本悄信個函式里,等於說除了呼叫函式的範圍,這些值就找不到了,所以不會改變主函式中的順序。

一般解決這種問題有兩種方法:

使用指標。將需要改變的值定義為指標型別,可以直接在呼叫函式中修改原函式的值;

使用返回值,這種方法只啟判輪能返回乙個值或者乙個陣列乙個結構體之類的,不能多次返回。語法為 return()。前提是函式要定義為對應的返回型別。

2樓:網友

因為被呼叫的函式核基中的值是臨時變數,主調函式中的值通過值傳遞的激姿方式改鉛謹複製給被調函式,相當於轉殖了乙個一模一樣的變數,你改變了乙個複製人他的本體當然不會變化了。

3樓:匿名使用者

主調函式、被調函式?

應該是主函鬧攜扮數與外部函式。

主函式是c語言必需擁有的,標誌是int main ()外部函式是宣告在主函式外,在主函式中呼叫,或在其他外部函式中呼叫。

它必需在主函式前面宣告,在主函式外任意地方定義。

一般宣告格式為 ,函式返回值型別 函式名 (形參表);

定義格式為:函式返回值型別 函式名 (形參表隱梁)外部函式也可以 函式返回值型別 函式名 (形參表)這樣直接宣告液灶定義一起。

c語言中,如果被調函式和主調函式都有輸出語句,那麼輸出時先輸出哪個?

4樓:匿名使用者

這個要看你的程式位置啊。如果呼叫函式在主函式里的輸出函式之前,則先輸出呼叫函式,反之輸出主函式再呼叫。

5樓:匿名使用者

先輸入被調函式的,後輸出主函式的 要不然就你被調函式寫個printf(「1」);在主函式里寫個printf(「2);試試就知道了。

6樓:匿名使用者

按執行的順序輸出。如:void print()int main()這樣子的話就是先執行printf("main");輸出main,然後再呼叫print函式輸出print;因為執行過程中,printf("main");在print();前面。

void print()int main()如果是這樣的話就跟前面相反,因為print();子函式在printf("main");前面。總之,看執行順序,一步步來。

7樓:匿名使用者

被調函式的位置和主調函式輸出語句。 順序 ~~從上到下!

主調函式中的兩個變數a和b,要求呼叫函式交換a,b值

8樓:網友

正確的函式是baid。

理由是:du

b錯在沒使用指zhi針,x和y是區域性變。

dao量,當函式結束後兩。

版個變數的值無法返權還給呼叫者。

c錯在演算法,先讓x指向y,這時x已經變成y,然後再讓y指向新的x,也就是y等於y自己,這樣的結果就是x的值丟了,呼叫這個函式之後,x和y兩個同時等於y了。

剩下的就是a和d了。a應該是錯在使用了一箇中間指標變數,在沒對這個指標變數初始化的情況下,直接*p=*x;應該是讓p直接指向x,而不是簡單的把x的值賦給p這個變數,所以,當第二句*x=*y;時,事實上p的值也已經發生了變化,如果把這個指標變數換成變通的變數就對了,這個我也不太確定,你可以直接執行一下試試。

為什麼在被調函式中使用指標就能夠互換主函式中兩個變數的值?

9樓:匿名使用者

指標指向乙個變數位址,在被調函式中,將變數位址做為引數,這樣被調函式就可通過位址(指標)訪問變州灶量的記憶體儲存單元對變數進行讀寫修改,如這樣乙個輸入語句冊昌扮理解:

scanf("%d", n); 表示先取n的位址,通過位址向單元寫內迅掘容。

10樓:匿名使用者

因為主函式和被調函式指標指的是同乙個位址。

11樓:匿名使用者

因為他是位址內容的交換。

c裡面void沒有返回值,為什麼主調函式還是能接收到被調函式的值呢?

12樓:

程式語言是編譯器來讀的,雖然很多時候程式語言語法說什麼什麼,但編譯器並沒有嚴格按語法來做。

void在函式名前表示函式無返回值,這個沒問題,但編譯器並沒有做任何事情,這些需要程式設計師自己控制,但編譯器會報警告提示你。

為什麼還能接收到void函式的返回值,是因為函式的返回值是在乙個暫存器中,呼叫函式直接取暫存器的值作為被呼叫函式的返回值,而不管這個值是不是被呼叫函式寫入到這個暫存器作為返回值的,也有可能是上一次某個函式寫入的。

4. 傳值呼叫時,為什麼在被調函式中改變變數的值不會到影響主調函式中的值?如果希望主調函式反映被調函式

13樓:網友

那就直接傳變數的位址過去,或者位址指標過去就行了,

14樓:匿名使用者

你把這個要反向影copy響的變數設。

bai置為乙個外部變數,任意操作du都會引起他的同步zhi變化了。

函式呼叫的原理是這dao樣的,傳來乙個引數,被調函式自己建立乙個空間用來儲存自己的變數,在這個裡面改變的結果都不能直接返回到主調函式的記憶體單元中去,一旦被調函式結束,此記憶體空間就被釋放,你改變的那個變數也就消失了。所以要使被調函式中的改變能返回去,必須是對乙個外部變數處理,或者要保證這個改變能在被調函式被釋放前,通過某種方式返回到主調函式那裡,比如說指標或者return等。總之就是要把改變反映到獨立於被調函式空間的乙個變數。

在主調函式和被調函式之間有資料傳遞時,被調函式中的引數稱為什麼?被調函式中的返回值是通過函式中的什

15樓:血天藍海

被呼叫的函式中的引數叫形參 變數叫臨時變數 被調函式結束時變數摧毀 返回值通過return 變數名;

16樓:匿名使用者

的引數分為實參和形參兩種。

實參是實實在在的引數,是需參與運算的引數。若已知函式max()是求最大值,則max(3,5)中的3和5都是實參。

形參是函式定義的時候,函式的引數,是臨時變數。

比如int max(int x,int y) 中的x和y。

當max函式不被呼叫的時候不會在內從中開闢儲存空間。故稱為形參。其值是有實參傳遞而來。

另外,虛機團上產品**,超級便宜。

定義乙個函式swap,功能為交換兩個變數a和b的值,在主函式中輸入2個數,呼叫該函式,輸出交換後的資料.

17樓:angela韓雪倩

#include

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

swap操作實現交換兩個容器內所有元素的功能。要交換的容器的型別必須匹配: 必須是相同型別的容器,而且所儲存的元素型別也必須相同。

呼叫了swap函式後,右運算元原來儲存的元素被存放在左運算元中,反之亦然。

18樓:網友

就是定義兩個變數 在輸出這兩個變數唄。

為什麼當成員函式被宣告為虛擬函式後,它的派生類中同名的函式都會自動生成為虛擬函式

龍生九copy子,各不相同 因為基bai類函式宣告為虛擬函式後,編譯器會增加一du個虛擬函式表,建立一 zhi種對映關係,dao 就是每個類的物件都指向自己對應的那個函式,即使使用的是基類的指標,通過該表可以查詢出來 同名,同引數,同返回值 因為繼承了唄。你重寫override 即可 c 使用虛擬函...

我已經被傷透了,已經放手了,為什麼還會為她心痛

親愛的樓主 很高興回答您的問題 下面是本人的回答 希望能給您帶來幫助 有些事,有些人,如果刻意的去選擇遺忘,那麼表示你根本不想忘掉,感情說到底,真的是自己的事情。人世間感人的愛情故事太多太多,也許你現在正在經歷著一份讓人羨慕的愛情,但你也要學會去珍惜。人生最大的幸福,就是能夠得到一個愛你的心,時時刻...

為什麼自己已經足夠好了還是被分手?

女人想要的,你真的懂嗎?因為在愛情中並不是付出就能得到回報,並且感情講究的是直覺,而不是感動。這只是你自以為的足夠好,或許在對方眼裡你還是不完美有缺點的,而這些缺點讓他難以接受。因為不愛,如果一個人不愛自己,自己做的再好也不會讓他感到你的好,而你不好的地方他會放大。分手後自己反而更好了,這是為什麼?...