目錄
- 一.簡介
- 1.函式宣告:不需要實作這個函式的功能
- 2.函式定義:必須實作這個函式的功能
- 3.函式呼叫:呼叫之前必須先宣告或者定義
- 二.函式值傳遞
- 三.函式址傳遞
- 四.函式值傳遞和址傳遞區別
- 五.猜你喜歡
零基礎 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 函式,以整數型別 a,b 作為實參傳遞,雖然在 func 函式中形參 x,y 值發生改變,但是并以不會影響 main 函式中 a,b 的值,這就是所謂的值傳遞;
三.函式址傳遞
在 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 函式,分別對變數 a、b 取地址,并作為 func 函式的實參傳遞,由于形參 x 和實參 a,形參x和實參 a 指向同一個記憶體地址,在 func 函式中形參 x,y 值發生改變,main 函式中 a,b 的值也會跟著一起改變,這就是所謂的址傳遞;
四.函式值傳遞和址傳遞區別
- 值傳遞:實參是傳遞的值,并非地址,形參的值發生改變,實參不受影響;
- 址傳遞:實參是傳遞的地址,并非值,形參的值發生改變,實參會跟著一起改變(因為實參和形參都是指向同一塊記憶體地址);
五.猜你喜歡
- C語言邏輯運算子
- C語言三目運算子
- C語言逗號運算式
- C語言 sizeof 和 strlen 函式區別
- C語言 strcpy 和 strcpy_s 函式區別
- C語言 memcpy 和 memcpy_s 區別
- C語言 陣列定義和使用
- C語言 陣列遍歷
- C語言 陣列下標越界
- C語言 陣列記憶體溢位
- C語言 陣列下標越界和記憶體溢位區別
- C語言 二維陣列定義和使用
- C語言 二維陣列行數和列數計算
- C語言 指標宣告和定義
- C語言 指標 p++ / p–
- C語言 p++/§++/_(p++)/_p++
- C語言 使用指標遍歷陣列
- C語言 指標和陣列區別
- C語言 陣列指標
- C語言 指標陣列
- C語言 指標陣列和陣列指標區別
- C語言 空指標 NULL
- C語言 void 指標
- C語言 野指標
- C語言 函式宣告和定義
- C語言 函式宣告和呼叫
- C語言 函式值傳遞和址傳遞
未經允許不得轉載:猿說編程 ? C語言 函式值傳遞和址傳遞
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295949.html
標籤:C
