C語言 函數值傳遞和址傳遞 - C語言零基礎入門教程


目錄

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門

一.簡介

函數聲明只是一個空殼,不會有具體的函數實現,而定義要實現函數的實現,例如:

1.函數聲明:不需要實現這個函數的功能

int sub(int x,int y); //只需要聲明即可,不需要實現這個函數的功能

2.函數定義:必須實現這個函數的功能

int sub(int x,int y) 需要實現這個函數的功能
{
    return (x-y);
}

3.函數調用:調用之前必須先聲明或者定義

函數在調用之前必須聲明或者定義,否則會報錯:找不到標識符,這也是為什么 hello world 中調用 printf 函數必須要包含 stdio.h 頭文件的原因;

二.函數值傳遞

C 語言中,函數的參數傳遞方式有兩種:值傳遞與地址傳遞。

值傳遞:使用變量、常量、數組元素作為函數參數,在調用結束后,形參值的任何變化都不會影響到實參的值。舉個例子:

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

#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函數的實際參數*/
    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 函數中調用 func 函數,以整數類型 ab 作為實參傳遞,雖然在 func 函數中形參 xy 值發生改變,但是並以不會影響 main 函數中 ab 的值,這就是所謂的值傳遞;

三.函數址傳遞

C 語言中,函數的參數傳遞方式有兩種:值傳遞與地址傳遞

址傳遞:使用指針變量或者內存地址作為函數參數,在調用結束后,實參跟隨形參一起變化。舉個例子:

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

#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函數的實際參數*/
    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 函數中調用 func 函數,分別對變量 ab 取地址,並作為 func 函數的實參傳遞,由於形參 x 和實參 a,形參x和實參 a 指向同一個內存地址,在 func 函數中形參 xy 值發生改變,main 函數中 ab 的值也會跟着一起改變,這就是所謂的址傳遞;

四.函數值傳遞和址傳遞區別

  • 值傳遞:實參是傳遞的值,並非地址,形參的值發生改變,實參不受影響;
  • 址傳遞:實參是傳遞的地址,並非值,形參的值發生改變,實參會跟着一起改變(因為實參和形參都是指向同一塊內存地址);

五.猜你喜歡

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

未經允許不得轉載:猿說編程 » C語言 函數值傳遞和址傳遞

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM