欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言:傳值與傳址交換整數

 更新時間:2021年08月06日 11:31:56   作者:rampant boy  
這篇文章主要給大家介紹了關于C語言中傳值與傳址之間交換整數的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

傳值調用

要想交換兩個整數的值,我們可以自定義一個函數,來實現(xiàn)這個過程。具體代碼如下:

#include <stdio.h>

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

int main()
{
	int a = 10;
	int b = 20;
	pirntf("交換前:a=%d  b=%d", a, b);
	Swap1(a, b);
	pirntf("交換前:a=%d  b=%d", a, b);
	return 0;
}

按照一般的邏輯,大多數人應該都會這樣寫出這樣的程序。但這個程序是否能達到目的呢》我們可以運行檢驗一下。

image-20210713102225191

很顯然,a,b兩個數的值并未發(fā)生改變。我們可以通過調試的方法來找出原因。

image-20210713102531340

通過這里我們可以知道,x,y的確接收了a,b的值,但是,a,b,x,y的地址都不相同,也就是說,這四個變量在內存中開辟了四塊空間。那么,在Swap函數中,x,y的值的確互換了,但這僅僅是在0x0118fd90和0x0118fd94這兩塊空間里進行的交換,與a,b無關.

image-20210713102921736

所以,這段代碼無法交換兩個整數的值。x,y僅僅接收了a,b的值,這個過程也被稱為傳值調用。

傳址調用

通過前面的分析,我們可以知道,要想交換a,b的值,需要在a,b所開辟的兩塊空間內進行操作。根據我們所學的知識,這時,我們就應該用到指針。因為指針變量可以存放地址。具體代碼如下:

#include <stdio.h>

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

int main()
{
	int a = 10;
	int b = 20;
	printf("交換前:a=%d  b=%d\n", a, b);
	Swap2(&a, &b);
	printf("交換后:a=%d  b=%d\n", a, b);
	return 0;
}

運行結果為:

image-20210713104107093

此時,這段代碼就很好的解決了我們的問題。pa,pb用來接收a,b的地址,這個過程稱為傳址調用。

綜上所述,Swap1在被調用的時候,實參傳給形參,其實形參是實參的一份臨時拷貝,改變形參,不能改變實參。Swap2在被調用的時候,函數和函數外邊的變量建立起正真的聯(lián)系,也就是函數內部可以直接操作函數外部的變量。這也就是傳值調用和傳址調用的區(qū)別。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • Pipes實現(xiàn)LeetCode(193.驗證電話號碼)

    Pipes實現(xiàn)LeetCode(193.驗證電話號碼)

    這篇文章主要介紹了Pipes實現(xiàn)LeetCode(193.驗證電話號碼),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 利用Matlab制作一款3D版2048小游戲

    利用Matlab制作一款3D版2048小游戲

    2048作為一款經典的小游戲,相信很多人都玩過吧?但是3D版的2048不知道有沒有人玩過呢?本文將用Matlab制作一個3D版的2048小游戲,快跟隨小編一起動手試一試吧
    2022-02-02
  • C++實現(xiàn)通訊錄管理系統(tǒng)項目

    C++實現(xiàn)通訊錄管理系統(tǒng)項目

    這篇文章主要為大家詳細介紹了C++實現(xiàn)通訊錄管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Opencv圖像處理之輪廓外背景顏色改變

    Opencv圖像處理之輪廓外背景顏色改變

    這篇文章主要為大家詳細介紹了Opencv圖像處理之輪廓外背景顏色改變,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++日志庫log4cplus的使用詳解

    C++日志庫log4cplus的使用詳解

    C++實現(xiàn)的log4cplus日志庫是一種易于使用的C?++日志記錄API,可提供線程安全,靈活且任意粒度的日志管理和配置控制。這篇文章就來和大家講講log4cplus的使用吧
    2023-03-03
  • c/c++語言位域注意事項分析

    c/c++語言位域注意事項分析

    所謂“位域”是把一個字節(jié)中的二進位劃分為幾個不同的區(qū)域, 并說明每個區(qū)域的位數。每個域有一個域名,答應在程序中按域名進行操作
    2013-09-09
  • C++內核對象封裝單實例啟動程序的類

    C++內核對象封裝單實例啟動程序的類

    這篇文章主要介紹了利用C++內核對象封裝的類,程序只能運行單個實例,可防止多次啟動,大家參考使用吧
    2013-11-11
  • C語言字符串原地壓縮實現(xiàn)方法

    C語言字符串原地壓縮實現(xiàn)方法

    這篇文章主要介紹了C語言字符串原地壓縮實現(xiàn)方法,包含了字符串的遍歷與轉換等操作,是很實用的操作技巧,需要的朋友可以參考下
    2014-09-09
  • C語言柔性數組詳解

    C語言柔性數組詳解

    這篇文章主要介紹了C語言柔性數組,通過實例分析了不完整類型、結構體及柔性數組等概念,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C/C++雜記 虛函數的實現(xiàn)的基本原理(圖文)

    C/C++雜記 虛函數的實現(xiàn)的基本原理(圖文)

    這篇文章主要介紹了C/C++雜記 虛函數的實現(xiàn)的基本原理(圖文),需要的朋友可以參考下
    2016-06-06

最新評論