目錄
零基礎(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ù)中 a,b 的值也會(huì)跟著一起改變,這就是所謂的址傳遞;
四.函數(shù)值傳遞和址傳遞區(qū)別
- 值傳遞:實(shí)參是傳遞的值,并非地址,形參的值發(fā)生改變,實(shí)參不受影響;
- 址傳遞:實(shí)參是傳遞的地址,并非值,形參的值發(fā)生改變,實(shí)參會(huì)跟著一起改變(因?yàn)閷?shí)參和形參都是指向同一塊內(nèi)存地址);
五.猜你喜歡
- C語(yǔ)言邏輯運(yùn)算符
- C語(yǔ)言三目運(yùn)算符
- C語(yǔ)言逗號(hào)表達(dá)式
- C語(yǔ)言 sizeof 和 strlen 函數(shù)區(qū)別
- C語(yǔ)言 strcpy 和 strcpy_s 函數(shù)區(qū)別
- C語(yǔ)言 memcpy 和 memcpy_s 區(qū)別
- C語(yǔ)言 數(shù)組定義和使用
- C語(yǔ)言 數(shù)組遍歷
- C語(yǔ)言 數(shù)組下標(biāo)越界
- C語(yǔ)言 數(shù)組內(nèi)存溢出
- C語(yǔ)言 數(shù)組下標(biāo)越界和內(nèi)存溢出區(qū)別
- C語(yǔ)言 二維數(shù)組定義和使用
- C語(yǔ)言 二維數(shù)組行數(shù)和列數(shù)計(jì)算
- C語(yǔ)言 指針聲明和定義
- C語(yǔ)言 指針 p++ / p–
- C語(yǔ)言 p++/§++/_(p++)/_p++
- C語(yǔ)言 使用指針遍歷數(shù)組
- C語(yǔ)言 指針和數(shù)組區(qū)別
- C語(yǔ)言 數(shù)組指針
- C語(yǔ)言 指針數(shù)組
- C語(yǔ)言 指針數(shù)組和數(shù)組指針區(qū)別
- C語(yǔ)言 空指針 NULL
- C語(yǔ)言 void 指針
- C語(yǔ)言 野指針
- C語(yǔ)言 函數(shù)聲明和定義
- C語(yǔ)言 函數(shù)聲明和調(diào)用
- C語(yǔ)言 函數(shù)值傳遞和址傳遞
未經(jīng)允許不得轉(zhuǎn)載:猿說(shuō)編程 ? C語(yǔ)言 函數(shù)值傳遞和址傳遞
本文由博客 - 猿說(shuō)編程 猿說(shuō)編程 發(fā)布!