中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
函數(shù)調(diào)用中實(shí)參和形參變化問(wèn)題

       很多初學(xué)者搞不明白子函數(shù)中什么時(shí)候可以改變實(shí)參值,什么時(shí)候不會(huì)改變。今天來(lái)具體分析下。
       先來(lái)解釋下實(shí)參和形參,所謂實(shí)參,就是通過(guò)主函數(shù)傳遞給子函數(shù)的變量。而子函數(shù)中用來(lái)接收變量的參數(shù)就稱形參。如下:

點(diǎn)擊(此處)折疊或打開(kāi)

  1. #include<stdio.h>
  2. void fun(int p,int q)
  3. {
  4.    int temp;

  5.    temp = p;
  6.    p = q;
  7.    q = temp;

  8.    return ;
  9. }

  10. int main()
  11. {
  12.    int x = 1,y = 2;

  13.    fun(x,y);

  14.    printf("%d\t%d\n",x,y);

  15.    return 0;
  16. }
     這段程序的輸出結(jié)果為2    1。

    以上代碼中,x,y是main函數(shù)要傳遞給子函數(shù)fun的實(shí)參,而p,q就是用來(lái)接收x和y的值的形參,所以,形參和實(shí)參的類型必須相同。 函數(shù)在傳參過(guò)程中,是一個(gè)內(nèi)容的拷貝過(guò)程,而每個(gè)函數(shù)都會(huì)有自己的??臻g來(lái)存放局部變量,所以,形參和實(shí)參是不同的內(nèi)存單元。通俗點(diǎn)講,就是,你改變他們其中一個(gè)的值,另一個(gè)的值不會(huì)改變。

    如上程序,main函數(shù)將x和y傳給了fun函數(shù)的p和q,相當(dāng)于p和q是對(duì)x和y的拷貝,p和q是存放于fun函數(shù)的??臻g的,x和y是存放于main函數(shù)的??臻g,它們是不同的內(nèi)存單元,所以在fun函數(shù)中交換p和q的值并不影響x和y的值,x和y的值仍然分別為1和2。而且,隨著fun函數(shù)的結(jié)束,p和q這兩個(gè)局部變量會(huì)被釋放。

    但是,當(dāng)你傳遞的參數(shù)是個(gè)指針的時(shí)候,就可以改變實(shí)參的值,以下通過(guò)程序來(lái)詳細(xì)分析。

點(diǎn)擊(此處)折疊或打開(kāi)

  1. #include<stdio.h>
  2. void fun(int *p,int *q)
  3. {
  4.     int temp;

  5.     temp = *p;
  6.     *p = *q;
  7.     *q = temp;

  8.     return ;
  9. }

  10. int main()
  11. {
  12.     int x = 1,y = 2;

  13.     fun(&x,&y);

  14.     printf("%d\t%d\n",x,y);

  15.     return 0;
  16. }

    這段程序的輸出結(jié)果為2    1。這是為什么呢?

    main函數(shù)在給fun函數(shù)傳遞參數(shù)時(shí),傳遞的是x和y的地址,而fun函數(shù)用p和q接收了這兩個(gè)地址,也就是,p中存放的是x的地址,q中存放的是y的地址,即*p和*q就分別是x和y了,然后再將*p和*q進(jìn)行交換,也就是將x和y進(jìn)行了交換,所以最終x的值為2,y的值為1。

    但是如下程序傳了指針,卻沒(méi)有改變x和y的值:

點(diǎn)擊(此處)折疊或打開(kāi)

  1. #include<stdio.h>
  2. void fun(int *p,int *q)
  3. {
  4.     int *temp;

  5.     temp = p;
  6.     p = q;
  7.     q = temp;

  8.     return ;
  9. }

  10. int main()
  11. {
  12.     int x = 1,y = 2;

  13.     fun(&x,&y);

  14.     printf("%d\t%d\n",x,y);

  15.     return 0;
  16. }

    這段程序輸出結(jié)果為1    2。為什么呢?

    雖然main函數(shù)將x和y的地址傳給了fun函數(shù),但是fun函數(shù)交換的是p和q的值,也就是,只對(duì)兩個(gè)地址進(jìn)行了交換,此時(shí)p中存放y的地址,q中存放x的地址,但是,這并沒(méi)有影響x和y的值,所以x仍為1,y仍為2。

    由上面3個(gè)程序,我們可以知道,對(duì)子函數(shù)形參的改變,并不影響main函數(shù)實(shí)參的值;但是,當(dāng)main函數(shù)實(shí)參傳遞的是變量的地址,子函數(shù)形參作為指針p的時(shí)候,對(duì)*p進(jìn)行操作,會(huì)改變main函數(shù)中變量的值;但是如果單純對(duì)指針p進(jìn)行操作,也一樣不會(huì)影響main函數(shù)中實(shí)參的值。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語(yǔ)言的那些小秘密之指針(一)
C語(yǔ)言經(jīng)典例題來(lái)襲!5大方法告訴你答案
C語(yǔ)言函數(shù)參數(shù)是如何傳遞的?
C指針函數(shù)與函數(shù)指針
簡(jiǎn)要說(shuō)明C語(yǔ)言中指針函數(shù)與函數(shù)指針的區(qū)別
西北大學(xué)計(jì)算機(jī)基礎(chǔ)與c語(yǔ)言程序設(shè)計(jì)精品課程網(wǎng)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服