亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言形參和實參傳值和傳址詳解刨析

 更新時間:2021年11月03日 10:46:40   作者:飛向星的客機  
形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用, 離開該函數(shù)則不能使用。實參出現(xiàn)在主調(diào)函數(shù)中,進入被調(diào)函數(shù)后,實參變量也不能使用,形參和實參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時, 主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送

講解知識點之前,我們先來做一道題!

例題

寫一個函數(shù)可以交換兩個整形變量的內(nèi)容

例如:

交換前:20 30

交換后:30 20

題目讓我們用函數(shù)的方式寫

#include <stdio.h>

void Swap1(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);

	//交換兩個變量
	printf("交換前: a=%d b=%d\n", a, b);

	Swap1(a, b);

	printf("交換后: a=%d b=%d\n", a, b);

	return 0;
}

運行結(jié)果:

20 30

交換前: a=20 b=30
交換后: a=20 b=30
咦?怎么回事呢!為什么沒有交換成功?

先別急,慢慢往下看!

分析

主函數(shù)里面的Swap1(a, b)中的ab叫做實參(實際參數(shù))

而當我們進到Swap1函數(shù)內(nèi)部的時候,Swap1(int x, int y)中的xy叫做形參(形式參數(shù))

所以我們在調(diào)用Swap1函數(shù)的時候,是不是把實際參數(shù)傳給了形式參數(shù)?

這個時候結(jié)論是這樣子的:

  • 當函數(shù)調(diào)用的時候,實參傳給形參,形參其實是實參的一份臨時拷貝

什么叫臨時拷貝呢?

  • 形參有自己的獨立空間,只是把實參的內(nèi)容拷貝一份,放到形參里面去

所以對形參的修改不會影響實參

實參與形參

實際參數(shù)(實參):

  • 真實傳給函數(shù)的參數(shù),叫實參。
  • 實參可以是:常量、變量、表達式、函數(shù)等。
  • 無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。

形式參數(shù)(形參):

  • 形式參數(shù)是指函數(shù)名后括號中的變量,因為形式參數(shù)只有在函數(shù)被調(diào)用的過程中才實例化(分配內(nèi)存單元),所以叫形式參數(shù)。
  • 形式參數(shù)當函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。

修改

很明顯,剛剛那個代碼是錯誤的,那么如何修改呢?

回想一下剛剛我們寫的函數(shù):

  • 寫了一個Swap1函數(shù),把a、b的值傳給了x、y以后,x、y的空間和a、b的空間是獨立的空間
  • 所以對a、b的修改是不會影響x、y的,它們之間是沒有建立連接的

我們再寫一個函數(shù)命名為:Swap2,讓Swap2函數(shù)內(nèi)部跟a、b之間建立聯(lián)系

那么怎么讓它們之間建立聯(lián)系呢?

答案:指針

#include <stdio.h>

void Swap2(int *pa, int *pb)
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);

	//交換兩個變量
	printf("交換前: a=%d b=%d\n", a, b);

	Swap2(&a, &b);

	printf("交換后: a=%d b=%d\n", a, b);

	return 0;
}

代碼運行結(jié)果:

20 30

交換前: a=20 b=30
交換后: a=30 b=20

分析

我先創(chuàng)建了a、b變量,a、b里面分別放了20、30

然后我把a的地址取出來了,放到pa變量里面去了;

然后我把b的地址取出來了,放到pb變量里面去了;

那么pa就有能力找到apb就有能力找到b

在這里插入圖片描述

那么*pa = a,*pb = b

再定義了一個z變量用于交換*pa*pb

在這里插入圖片描述

傳值和傳址

我們來看看剛剛寫的代碼

#include <stdio.h>

void Swap1(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}

void Swap2(int *pa, int *pb)
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);

	//交換兩個變量
	printf("交換前: a=%d b=%d\n", a, b);

	Swap1(a, b);

	Swap2(&a, &b);

	printf("交換后: a=%d b=%d\n", a, b);

	return 0;
}

當我去調(diào)用Swap1函數(shù)的時候,我把a、b本身的變量傳到Swap1函數(shù),這種方式叫:傳值調(diào)用

當我去調(diào)用Swap2函數(shù)的時候,我把a、b的地址傳到Swap2函數(shù),這種方式叫:傳址調(diào)用

傳值調(diào)用

函數(shù)的形參和實參分別占有不同內(nèi)存塊,對形參的修改不會影響實參

傳址調(diào)用

傳址調(diào)用是把函數(shù)外部創(chuàng)建變量的內(nèi)存地址傳遞給函數(shù)參數(shù)的一種調(diào)用函數(shù)的方式。這種傳參方式可以讓函數(shù)和函數(shù)外邊的變量建立起真正的聯(lián)系,也就是函數(shù)內(nèi)部可以直接操
作函數(shù)外部的變量

到此這篇關于C語言形參和實參傳值和傳址詳解刨析的文章就介紹到這了,更多相關C語言 參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++ OpenCV模擬實現(xiàn)微信跳一跳

    C++ OpenCV模擬實現(xiàn)微信跳一跳

    這篇文章主要介紹了使用C++和OpenCV模擬實現(xiàn)微信跳一跳功能,本文圖文并茂通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點

    C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點

    本篇文章主要介紹了C++中的普通成員函數(shù)、虛函數(shù)以及純虛函數(shù),非常的詳細,有需要的朋友可以參考下
    2015-07-07
  • c語言實現(xiàn)通訊錄管理系統(tǒng)詳細實例

    c語言實現(xiàn)通訊錄管理系統(tǒng)詳細實例

    這篇文章主要給大家介紹了關于c語言實現(xiàn)通訊錄管理系統(tǒng)的相關資料,通訊錄管理系統(tǒng)是一種常見的應用程序,可以用來管理聯(lián)系人的信息,包括姓名、電話號碼、地址等,需要的朋友可以參考下
    2023-07-07
  • C++實現(xiàn)教職工信息管理系統(tǒng)

    C++實現(xiàn)教職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)教職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • VS2010/MFC編程(常用控件:樹形控件Tree Control控件創(chuàng)建h和實例)

    VS2010/MFC編程(常用控件:樹形控件Tree Control控件創(chuàng)建h和實例)

    本篇文章介紹了VS2010/MFC編程:常用控件:樹形控件Tree Control,包括樹形控件的創(chuàng)建、CTreeCtrl類的主要成員函數(shù)和應用實例有興趣的可以了解一下。
    2016-12-12
  • C++中fstream,ifstream及ofstream用法淺析

    C++中fstream,ifstream及ofstream用法淺析

    這篇文章主要介紹了C++中fstream,ifstream及ofstream用法,適合C++初學者學習文件流的操作,需要的朋友可以參考下
    2014-08-08
  • C++ vector數(shù)組用法及解析

    C++ vector數(shù)組用法及解析

    這篇文章主要給大家分享的是C++ vector數(shù)組用法及解析,什么是什么是vector數(shù)組呢?下面文章將對打家做詳細介紹,感興趣的小伙伴可以參考一下
    2021-10-10
  • C語言關于二叉樹中堆的創(chuàng)建和使用整理

    C語言關于二叉樹中堆的創(chuàng)建和使用整理

    大家好,這里是針對二叉樹中堆結(jié)構(gòu)的順序儲存,整理出來一篇博客供我們一起復習和學習,如果文章中有理解不當?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學習,共同進步
    2022-08-08
  • QT編寫tcp通信工具(Server端)

    QT編寫tcp通信工具(Server端)

    這篇文章主要為大家詳細介紹了QT編寫tcp通信工具,一個類似網(wǎng)上常見的網(wǎng)絡調(diào)試工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中queue容器的具體使用

    C++中queue容器的具體使用

    本文主要介紹了C++中queue容器的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論