女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么調用函數的時候,有些情況下要傳地址?傳地址有什么好處?

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-07-30 10:32 ? 次閱讀

為什么調用函數的時候,有些情況下要傳地址?傳地址有什么好處?

首先有一種情況,是必須要傳地址的,比如交換兩個數字。

voidswap(int*x,int*y)
{
    int t = *x;
    *x = *y;
*y=t;
}


int main()
{
    int a = 1, b = 2;
swap(&a, &b);

    return 0;
}
凡是這種涉及到在函數內部修改實參值的,都得要傳地址才行,通過地址來間接得修改。

再比如我們前兩天講的,函數如何返回多個數據,也可以提前申請好一塊內存,把內存的地址傳過去,然后把要返回的多個數據保存在這塊內存中,也能解決問題。
voidtest(int*a)
{
    /*結果保存在a中*/
}


int main()
{
intresult[5] = {0};
test(result);

    return 0;
}
除了這種必須傳地址的情況,剩下的可以傳地址,也可以不傳地址,但是傳地址的話有時候效率更高。
struct Test
{
int a[1024];
};
比如我們寫代碼的時候經常用到結構體,我寫的這個結構體占了4096字節,如果直接傳值,那么形參也要分配4096個字節,而且還得把實參的數據拷貝過來。

但是如果換成地址傳遞,形參只需要4個字節或者8個字節,保存結構體的地址就行,這種方式,將會大大提高函數調用的效率。

如果結構體再大一些,比如他要占用兆級別的內存空間,如果還是傳值,那程序就會很容易奔潰,因為程序的??臻g是有限的,在Linux中默認是8M,過度使用的話,很容易超出它的限制,結果就會不可控。

所以調用函數的時候應該選擇傳值還是傳地址,沒有固定的說法。

傳值操作簡單,通俗易懂,但是對于一些復雜的類型,浪費時間也浪費空間。

17623418-2def-11ee-815d-dac502259ad0.png ?

傳地址雖然理解起來困難一些,但它能在函數內部去訪問實參,對于一些復雜的類型,既能提高調用的效率,又能節省空間。

17913e70-2def-11ee-815d-dac502259ad0.png?





審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux系統
    +關注

    關注

    4

    文章

    603

    瀏覽量

    28301
  • LINUX內核
    +關注

    關注

    1

    文章

    317

    瀏覽量

    22185

原文標題:值傳遞和地址傳遞

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C語言指針做函數參數,指針做函數返回類型

    時候我們可以使用函數的返回值來回數據,在簡單的情況下是可以的,但是如果返回值其它用途(例如返回函數
    發表于 10-24 10:42 ?719次閱讀

    esp-wroom-32如何在不使用wifi功能的情況下獲取mac地址?

    你好 我想檢查 esp-wroom-32 模塊的mac_address。 我已經通過初始化wifi然后調用函數來esp_get_mac檢查了它。 但是,如果我想在不使用 wifi 功能的情況下獲取該 mac
    發表于 07-19 09:37

    函數參數據出錯

    我在CubSuite+里建了個.c和.h,里面函數參數時,單步調試發現,傳過去去的數值不對,而在主函數調用又傳對了,這是什么鬼???
    發表于 08-08 17:26

    labview 中怎么獲取數值的指針(地址)?調用dll時往里面地址

    labview 中怎么獲取數值的指針(地址)?調試一個設備,調用dll時往里面地址,看了官方.h文件,參考了官方的C#代碼,自己用lab
    發表于 03-15 08:59

    IP地址,IP地址是什么意思

    IP地址,IP地址是什么意思 基本定義 IP地址都是一個十分重的概念,INTERNET的許多服務和特點都是通過IP地址體現出來的。
    發表于 04-03 15:12 ?1728次閱讀

    C語言回調函數學習

    對指針的應用是C語言編程的精髓所在,而回調函數就是C語言里面對函數指針的高級應用。簡而言之,回調函數是一個通過函數指針調用
    發表于 05-27 09:44 ?7287次閱讀

    C語言函數中的值和指針到底什么區別

    我們可能聽過C語言中的值和指針,在其他語言中,也有引用一說,那么他們到底什么區別呢?如果你還不能準確地分辨,就該好好了解一了。
    的頭像 發表于 09-08 10:14 ?5307次閱讀

    C語言函數參數關于值和指針什么區別?

    C語言函數參數的值和指針什么區別?
    的頭像 發表于 02-26 16:35 ?2494次閱讀

    C語言-函數的定義、聲明、

    C語言里函數是非常重要的知識點,一個完整的C語言程序就是由主函數和各個子函數組成的,主函數調用函數
    的頭像 發表于 08-14 09:57 ?2234次閱讀

    什么情況下進行電能質量檢測?

    什么情況下進行電能質量檢測?
    發表于 09-08 14:20 ?816次閱讀

    使用LPNDR_ReadGlobalInfo函數塊讀取IP地址和MAC地址

    使用 LPNDR_ReadGlobalInfo 函數塊可以讀取 PROFINET 設備的 IP 地址和 MAC 地址。
    的頭像 發表于 11-14 10:09 ?5394次閱讀

    函數與遞歸-2

    調用是把函數外部創建變量的內存地址傳遞給函數參數的一種調用
    的頭像 發表于 02-21 15:53 ?743次閱讀
    <b class='flag-5'>函數</b>與遞歸-2

    DNS解析一個地址時候會返回多個IP嗎?

    實現一個域名對應多個 IP 地址的效果,只需要在 DNS 解析操作平臺,添加一條解析記錄,將網站的域名指向服務器的 IP 地址。一般情況下,一個域名對應一個 IP
    的頭像 發表于 09-19 17:05 ?1370次閱讀
    DNS解析一個<b class='flag-5'>地址</b>的<b class='flag-5'>時候</b>會返回多個IP嗎?

    什么情況下避免使用系統調用

    制。如果對變量的每次訪問都使用上述機制,由于系統調用會陷入內核空間,需要頻繁的進行上下文切換,這就導致了程序的時間開銷比較大。 自然的,我們就想到,在多線程環境中,在某些情況下是否能減少甚至避免使用系統調用?答案是肯
    的頭像 發表于 11-13 10:32 ?646次閱讀
    什么<b class='flag-5'>情況下</b>避免使用系統<b class='flag-5'>調用</b>

    什么情況下IP地址會相同?

    呈現的是路由器的公網IP地址,所以當我們進行外部通信的時候,它們在這一層面的IP地址相同。 簡單來說,你在家里和家人所有的設備都是通過家里的路由上網,對于外部的網站來說,他們的IP地址
    的頭像 發表于 11-19 11:20 ?1353次閱讀
    什么<b class='flag-5'>情況下</b>IP<b class='flag-5'>地址</b>會相同?