一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

函數(shù)調(diào)用中實(shí)參和形參變化問題

 thchen0103 2017-02-04

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

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

  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就是用來接收x和y的值的形參,所以,形參和實(shí)參的類型必須相同。 函數(shù)在傳參過程中,是一個(gè)內(nèi)容的拷貝過程,而每個(gè)函數(shù)都會(huì)有自己的??臻g來存放局部變量,所以,形參和實(shí)參是不同的內(nèi)存單元。通俗點(diǎn)講,就是,你改變他們其中一個(gè)的值,另一個(gè)的值不會(huì)改變。

    如上程序,main函數(shù)將x和y傳給了fun函數(shù)的p和q,相當(dāng)于p和q是對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í)參的值,以下通過程序來詳細(xì)分析。

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

  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。

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

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

  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的值,也就是,只對兩個(gè)地址進(jìn)行了交換,此時(shí)p中存放y的地址,q中存放x的地址,但是,這并沒有影響x和y的值,所以x仍為1,y仍為2。

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本精品视频一二三区| 国产精品一区二区三区欧美| 懂色一区二区三区四区| 欧美一区二区不卡专区| 久久99亚洲小姐精品综合| 制服丝袜美腿美女一区二区| 我的性感妹妹在线观看| 在线观看欧美视频一区| 日韩欧美一区二区黄色| 91亚洲精品亚洲国产| 亚洲午夜福利视频在线| 中文字幕一二区在线观看| 免费精品国产日韩热久久| 国内九一激情白浆发布| 欧美三级精品在线观看| 日本亚洲精品在线观看| 日本本亚洲三级在线播放| 亚洲精品国产主播一区| 乱女午夜精品一区二区三区| 国产亚洲精品岁国产微拍精品 | 欧美一区二区三区不卡高清视| 欧美成人免费一级特黄| 99国产高清不卡视频| 欧美日韩国产一级91| 高清一区二区三区大伊香蕉| 欧洲日韩精品一区二区三区| 日本和亚洲的香蕉视频| 一级片二级片欧美日韩| 欧美不雅视频午夜福利| 激情五月天免费在线观看| 亚洲欧洲成人精品香蕉网| 高清国产日韩欧美熟女| 国产成人高清精品尤物| 91久久精品在这里色伊人| 91熟女大屁股偷偷对白| 国产水滴盗摄一区二区| 国产日韩欧美在线亚洲| 91福利免费一区二区三区| 日本本亚洲三级在线播放| 欧美午夜视频免费观看| 在线九月婷婷丁香伊人|