C語言函數(shù)參數(shù)詳解之實(shí)際參數(shù)(實(shí)參)&形式參數(shù)(形參)詳解
這篇文章我們一起學(xué)習(xí)一下函數(shù)的參數(shù),函數(shù)的參數(shù)分為實(shí)參和形參。
一.什么是實(shí)際參數(shù)(實(shí)參)
首先我們來學(xué)習(xí)實(shí)參,什么是實(shí)參呢?
實(shí)際參數(shù)簡稱“實(shí)參”。
在調(diào)用有參函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)稱為“實(shí)參”,是我們真實(shí)傳給函數(shù)的參數(shù),實(shí)參可以是:常量、變量、表達(dá)式、函數(shù)等。
無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以便把這些值傳送給形參。
下面我們寫個(gè)代碼來幫助大家理解:
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 20;
int b = 30;
int ret1 = add(20, 30);
printf("%d\n", ret1);
int ret2 = add(a, b);
printf("%d\n", ret2);
int ret3 = add(a + b, a - b);
printf("%d\n", ret3);
int ret4 = add(add(2, 3), 5);
printf("%d\n", ret4);
return 0;
}無論實(shí)參是何種類型的量,它們都必須有確定的值

二.什么是形式參數(shù)(形參)
那什么是形式參數(shù)呢?
形式參數(shù)是指函數(shù)名后括號(hào)中的變量,因?yàn)樾问絽?shù)只有在函數(shù)被調(diào)用的過程中才實(shí)例化(分配內(nèi)存單元),所以叫形式參數(shù)。
形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。因此形式參數(shù)只在函數(shù)中有效。
還來看上面的代碼:
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 20;
int b = 30;
//printf("%d %d", x, y);
int ret1 = add(20, 30);
printf("%d\n", ret1);
int ret2 = add(a, b);
printf("%d\n", ret2);
int ret3 = add(a + b, a - b);
printf("%d\n", ret3);
int ret4 = add(add(2, 3), 5);
printf("%d\n", ret4);
return 0;
}1.形參只在函數(shù)中有效:
我們?nèi)绻诤瘮?shù)外部使用函數(shù)形參,這是不可行的。

2.形參在函數(shù)調(diào)用過程中才實(shí)例化(分配內(nèi)存單元)
函數(shù)調(diào)用之前,形參還未創(chuàng)建

函數(shù)調(diào)用過程中,形參才被實(shí)例化

函數(shù)調(diào)用結(jié)束,形參生命周期結(jié)束,被銷毀

三.形參與實(shí)參的關(guān)系
了解了什么是函數(shù)的形參和實(shí)參,那兩者之間有什么關(guān)系呢?
他們的關(guān)系是:
形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時(shí)拷貝。
這里我們對函數(shù)的實(shí)參和形參進(jìn)行分析:
我們來嘗試寫一個(gè)函數(shù)交換兩個(gè)整形變量的內(nèi)容。
#include <stdio.h>
//實(shí)現(xiàn)成函數(shù),但是不能完成任務(wù)
void Swap1(int x, int y) {
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap1(num1, num2);
printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
函數(shù)swap1用x,y接收了num1,num2,并把x,y進(jìn)行了交換,但是我們打印出來的num1,num2并沒有交換,為啥呢?
這是因?yàn)樵诤瘮?shù)調(diào)用時(shí),形參x,y是實(shí)參num1,num2的一份臨時(shí)拷貝,形參和實(shí)參并沒有建立真正意義上的聯(lián)系,形參x,y是兩個(gè)獨(dú)立的變量,和實(shí)參num1,num2分別占用不同的內(nèi)存空間,在這里,形參和實(shí)參只是數(shù)值相同罷了.

所以,交換形參x,y,并不會(huì)對實(shí)參num1,num2產(chǎn)生影響!??!
在這里,我們?nèi)绻胍_(dá)到交換實(shí)參的目的,需要進(jìn)行傳址調(diào)用,這個(gè)后面我們會(huì)詳細(xì)給大家講解,現(xiàn)在可以先簡單了解一下:
所謂傳址,就是num1,num2的地址作為參數(shù)傳過去,當(dāng)然我們就需要兩個(gè)整形指針去接收,然后,我們在函數(shù)內(nèi)部,就可以通過這兩個(gè)指針找到num1,num2,對它們進(jìn)行交換.
接下來,我們就用傳址調(diào)用的方法來實(shí)現(xiàn)一下函數(shù):
#include <stdio.h>
//正確的版本
void Swap2(int* px, int* py) {
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}

這次,我們就真正達(dá)到了交換num1,num2的目的
總之,我們最后得到的結(jié)論就是,函數(shù)實(shí)參與形參的關(guān)系就是:
形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時(shí)拷貝。
以上就是對函數(shù)參數(shù)的介紹,歡迎大家指正!?。?/p>
到此這篇關(guān)于C語言函數(shù)參數(shù)詳解之實(shí)際參數(shù)(實(shí)參)&形式參數(shù)(形參)詳解的文章就介紹到這了,更多相關(guān)C語言實(shí)際參數(shù)與形式參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)動(dòng)態(tài)版通訊錄的代碼分享
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)簡單的動(dòng)態(tài)版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識(shí),需要的可以參考一下2023-01-01
C語言實(shí)現(xiàn)的學(xué)生選課系統(tǒng)代碼分享
這篇文章主要介紹了C語言實(shí)現(xiàn)的學(xué)生選課系統(tǒng)代碼分享,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10

