C語(yǔ)言 函數(shù)值傳遞和址傳遞 - C語(yǔ)言零基礎(chǔ)入門(mén)教程

目錄

零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語(yǔ)言基礎(chǔ)入門(mén)

一.簡(jiǎn)介

函數(shù)聲明只是一個(gè)空殼,不會(huì)有具體的函數(shù)實(shí)現(xiàn),而定義要實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn),例如:

1.函數(shù)聲明:不需要實(shí)現(xiàn)這個(gè)函數(shù)的功能

int sub(int x,int y); //只需要聲明即可,不需要實(shí)現(xiàn)這個(gè)函數(shù)的功能

2.函數(shù)定義:必須實(shí)現(xiàn)這個(gè)函數(shù)的功能

int sub(int x,int y) 需要實(shí)現(xiàn)這個(gè)函數(shù)的功能
{
    return (x-y);
}

3.函數(shù)調(diào)用:調(diào)用之前必須先聲明或者定義

函數(shù)在調(diào)用之前必須聲明或者定義,否則會(huì)報(bào)錯(cuò):找不到標(biāo)識(shí)符,這也是為什么 hello world 中調(diào)用 printf 函數(shù)必須要包含 stdio.h 頭文件的原因;

二.函數(shù)值傳遞

C 語(yǔ)言中,函數(shù)的參數(shù)傳遞方式有兩種:值傳遞與地址傳遞。

值傳遞:使用變量、常量、數(shù)組元素作為函數(shù)參數(shù),在調(diào)用結(jié)束后,形參值的任何變化都不會(huì)影響到實(shí)參的值。舉個(gè)例子:

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言 函數(shù)值傳遞和址傳遞
//@Time:2021/06/20 08:00
//@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!
/******************************************************************************************/ 

#include <stdio.h>
void func(int x, int y)
{
    x = 100;
    y = 200;
    printf("func:x = %d, y = %d\n", x, y);
}
int main(void)
{
    int a=10;
    int b=20;
     /*變量a、b為func函數(shù)的實(shí)際參數(shù)*/
    func(a, b);
    printf("main:a = %d, b = %d\n", a, b);
    return 0;
}
/*
輸出:
func:x = 100, y = 200
main:x = 10, y = 20
*/

main 函數(shù)中調(diào)用 func 函數(shù),以整數(shù)類(lèi)型 a,b 作為實(shí)參傳遞,雖然在 func 函數(shù)中形參 x,y 值發(fā)生改變,但是并以不會(huì)影響 main 函數(shù)中 a,b 的值,這就是所謂的值傳遞;

三.函數(shù)址傳遞

C 語(yǔ)言中,函數(shù)的參數(shù)傳遞方式有兩種:值傳遞與地址傳遞。

址傳遞:使用指針變量或者內(nèi)存地址作為函數(shù)參數(shù),在調(diào)用結(jié)束后,實(shí)參跟隨形參一起變化。舉個(gè)例子:

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言 函數(shù)值傳遞和址傳遞
//@Time:2021/06/20 08:00
//@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!
/******************************************************************************************/ 

#include <stdio.h>
void func(int *x, int *y)
{
    *x = 100;
    *y = 200;
    printf("func:x = %d, y = %d\n", x, y);
}
int main(void)
{
    int a=10;
    int b=20;
     /*分別對(duì)變量a、b取地址,并作為func函數(shù)的實(shí)際參數(shù)*/
    func(&a, &b);
    printf("main:a = %d, b = %d\n", a, b);
    return 0;
}
/*
輸出:
func:x = 100, y = 200
main:x = 100, y = 200

main 函數(shù)中調(diào)用 func 函數(shù),分別對(duì)變量 a、b 取地址,并作為 func 函數(shù)的實(shí)參傳遞,由于形參 x 和實(shí)參 a,形參x和實(shí)參 a 指向同一個(gè)內(nèi)存地址,在 func 函數(shù)中形參 x,y 值發(fā)生改變,main 函數(shù)中 ab 的值也會(huì)跟著一起改變,這就是所謂的址傳遞;

四.函數(shù)值傳遞和址傳遞區(qū)別

  • 值傳遞:實(shí)參是傳遞的值,并非地址,形參的值發(fā)生改變,實(shí)參不受影響;
  • 址傳遞:實(shí)參是傳遞的地址,并非值,形參的值發(fā)生改變,實(shí)參會(huì)跟著一起改變(因?yàn)閷?shí)參和形參都是指向同一塊內(nèi)存地址);

五.猜你喜歡

  1. C語(yǔ)言邏輯運(yùn)算符
  2. C語(yǔ)言三目運(yùn)算符
  3. C語(yǔ)言逗號(hào)表達(dá)式
  4. C語(yǔ)言 sizeof 和 strlen 函數(shù)區(qū)別
  5. C語(yǔ)言 strcpy 和 strcpy_s 函數(shù)區(qū)別
  6. C語(yǔ)言 memcpy 和 memcpy_s 區(qū)別
  7. C語(yǔ)言 數(shù)組定義和使用
  8. C語(yǔ)言 數(shù)組遍歷
  9. C語(yǔ)言 數(shù)組下標(biāo)越界
  10. C語(yǔ)言 數(shù)組內(nèi)存溢出
  11. C語(yǔ)言 數(shù)組下標(biāo)越界和內(nèi)存溢出區(qū)別
  12. C語(yǔ)言 二維數(shù)組定義和使用
  13. C語(yǔ)言 二維數(shù)組行數(shù)和列數(shù)計(jì)算
  14. C語(yǔ)言 指針聲明和定義
  15. C語(yǔ)言 指針 p++ / p–
  16. C語(yǔ)言 p++/§++/_(p++)/_p++
  17. C語(yǔ)言 使用指針遍歷數(shù)組
  18. C語(yǔ)言 指針和數(shù)組區(qū)別
  19. C語(yǔ)言 數(shù)組指針
  20. C語(yǔ)言 指針數(shù)組
  21. C語(yǔ)言 指針數(shù)組和數(shù)組指針區(qū)別
  22. C語(yǔ)言 空指針 NULL
  23. C語(yǔ)言 void 指針
  24. C語(yǔ)言 野指針
  25. C語(yǔ)言 函數(shù)聲明和定義
  26. C語(yǔ)言 函數(shù)聲明和調(diào)用
  27. C語(yǔ)言 函數(shù)值傳遞和址傳遞

未經(jīng)允許不得轉(zhuǎn)載:猿說(shuō)編程 ? C語(yǔ)言 函數(shù)值傳遞和址傳遞

本文由博客 - 猿說(shuō)編程 猿說(shuō)編程 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容