在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

函數與遞歸-2

汽車電子技術 ? 來源:微亮筆記 ? 作者: PASSION ? 2023-02-21 15:53 ? 次閱讀

書接上回圖片圖片

上期主要是C語言中關于函數的部分知識,我向大家介紹了函數的定義,庫函數,自定義函數的定義和使用方法及函數參數的類型。這些內容都是對函數的基本認識,而函數在編程過程中的具體使用和更深層次的知識我們將在本期及下期內容介紹。話不多說,我們開始本期的學習圖片

本期將在上期基礎之上繼續加深對函數的認識

1.函數的兩種調用方法和區別

2.函數的嵌套調用和鏈式訪問

3.函數的聲明和定義

  • 函數的調用

** 傳值調用**

函數的形參和實參分別占有不同的內存塊,對形參的修改不會影響實參

** 傳址調用

** 傳址調用是把函數外部創建變量的內存地址傳遞給函數參數的一種調用函數的方式

此傳參方式可以讓函數和函數外面的變量建立起真正的聯系。也就是說,函數內部可以直接操作函數外部的變量。

只聽定義會一頭霧水,接下來我為大家提供一個具體問題來方便大家感受兩種調用的區別。

 應用:**【給出兩個變量ab。 要求交換二者的值】**
#include 
void swap1(int x,int y)//此函數無返回值,因此用"void"作為返回值類型
{
  int tmp=0;
  tmp=x;
  x=y;
  y=tmp;
}//定義函數,交換變量值
int main()
{
  int a=10;
  int b=20;
  swap1(a,b);//無返回值函數的執行方法,我們接下來會提到
  printf("a= %d b= %d",a,b);
  return 0;
}

如上述函數,我們看似成功地完成了任務,但當我們在執行程序之后,屏幕上打印出來的卻仍是"a=10 b=20",這說明我們剛才所寫函數并不能完成我們所預期的功能,那問題出在哪里呢?請看接下來的代碼:

#include
void swap2(int* x,int* y)//此處與上面函數不同,體會"int"與"int*"的區別
{
  int tmp=0;
  tmp=*x;
  *x=*y;
  *y=tmp;
}
int main()
{
  int a=10;
  int b=20;
  swap2(&a,&b);//此處也是不同之處
  printf("a= %d b=%d", a, b);
  return 0;
}
而這個代碼運行的結果就達到了我們想要的效果,這就是兩種調用的不同之處,傳值調用是將實際參數拷貝到函數的形式參數中,在經過一系列運算后得出結果,它注重的是返回值;而傳址調用則是直接將存放實際參數的地址傳遞給函數,一般用于需要對函數參數自身改變的程序,如上面提到的交換兩個變量的值,這種調用一般來說都是沒有返回值的。

當我們在定義完一個函數,要在主函數中去使用時,我們仍需要注意一個細節,那就是在使用有返回值的函數時需要有一個變量去接收,而沒有返回值的函數就不需要考慮這個問題了。

在聽完對兩種調用的介紹后,相信大家對函數調用已經有初步的認識了,那么我們接下來看幾道關于函數調用的問題:

1.寫一個函數判斷一個數是否是素數

2.寫一個函數判斷一年是否是閏年

3.寫一個函數實現一個整型有序數組的二分查找

4.寫一個函數,每調用一次,就會將變量"num"的值加一

由于篇幅有限,我這里就不給出以上問題的詳解了,具體的習題集合我會之后專門出一個合集來介紹。以上問題需要用到的函數調用方法分別是1~3:傳值調用,4:傳址調用。

而我們在實際的使用過程中還是遵循**“需要對函數參數自身改變的就用傳址調用;需要在運算后得出一個新結果的就用傳值調用**”這一原則。

一句話,熟能生巧,用多了我們自然而然就會了圖片圖片

**函數的嵌套調用和鏈式訪問

** 函數與函數之間是可以有機結合的

嵌套調用

在函數中可以調用另一個函數,這種方式叫嵌套調用。由于比較簡單,這里就不舉例子了圖片圖片

鏈式訪問

把一個函數的返回值作為另一個函數的參數。這個概念同樣比較好理解,不過這里有個很有趣的例子圖片圖片

#include
int main()
{
  printf("%d",printf("%d",printf("%d",43)));
  //結果是啥???
  return 0;
}

大家的第一反應應該都是認為屏幕上會打印出“43 43 43”,但是在程序運行后,屏幕上卻打印出了“4321”。問題出在哪兒呢?原來c語言規定,printf的返回值就是它所打印的字符個數,在上述例子中,最內層的printf打印了“43”,所以它的返回值(就是2)成為了第二個printf的參數,以此類推,屏幕上就打印出了上述的結果。

  • 函數的聲明和定義

函數聲明

1.告訴編譯器有一個函數叫什么,參數是什么,返回類型是什么。但是具體是不是存在無關緊要。

2.函數的聲明一般出現在函數的使用之前。要滿足先聲明后使用。

3.函數的聲明一般要放在頭文件中。

函數定義

函數定義是指函數的具體實現,交代函數的功能實現。

下面舉一個簡單的函數聲明的例子:

int add(int ,int );
int main()
{
  int a=10;
  int b=20;
  int sum =0;
  sum=add(a,b);
  printf("%d",sum);
  return 0;
}
int add(int x,int y)
{
  return (x+y);
}

如上述代碼所寫,我們先在程序最上面聲明了存在“add”這一函數,所以程序在執行時就不會報錯。我們要知道的是,C語言在執行時是從上到下依次執行的。如果不事先聲明的話,在函數位于主函數后面的情況下去運行,程序就會報錯。

當然我們聲明函數并不是用來寫上面的代碼,這種寫法非常睿智,我只是舉個函數聲明的例子。函數聲明更多情況下適用于一些比較復雜的程序,當我們需要寫一些復雜的代碼時,由于多人分工,大家會分別負責不同的模塊,這時我們就可以創建多個源文件和對應的頭文件分別進行編程,在使用時就會方便很多了圖片圖片

好了,我們這期的內容就結束了,祝大家新年快樂!圖片圖片

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

    關注

    8

    文章

    3031

    瀏覽量

    74120
  • 函數
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62723
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28402
收藏 人收藏

    評論

    相關推薦

    32-代碼復用與函數遞歸-2

    編程語言代碼行業芯事經驗分享
    硬件天空
    發布于 :2022年05月30日 14:26:40

    數據結構與算法:1-4-1-函數遞歸(2)#結構數據

    數據結構與算法
    學習硬聲知識
    發布于 :2022年12月18日 10:15:11

    《C Primer Plus》讀書筆記——遞歸

    本帖最后由 cugwyman 于 2017-2-5 20:14 編輯 遞歸的原理一個函數調用其本身,此調用過程為遞歸(recursion)。
    發表于 02-05 20:06

    LabVIEW遞歸

    感受到了遞歸的復雜和重要性。在愛因斯坦這一問題中,程序設計的時候反復遞歸,一個遞歸函數再調用另外一個遞歸
    發表于 02-19 11:52

    Labview遞歸函數的使用案例

    Labview遞歸函數的使用案例,簡單的1+2+3...+100求和,簡單易懂,充分理解遞歸函數的思想
    發表于 10-09 09:37

    C++教程之函數遞歸調用

    C++教程之函數遞歸調用 在執行函數 f 的過程中,又要調用 f 函數本身,稱為函數遞歸調
    發表于 05-15 18:00 ?35次下載

    遞歸指的是在函數的定義中使用函數自身的方法

    C語言支持遞歸,即一個函數可以調用其自身。但在使用遞歸時,程序員需要注意定義一個從函數退出的條件,否則會進入死循環。遞歸
    的頭像 發表于 11-12 15:06 ?7146次閱讀

    C++的實驗教程之函數遞歸算法資料免費下載

    函數遞歸算法 1.范例:求組合數, 一、實驗目的1. 學會解決簡單的遞歸算法。2. 掌握函數的嵌套調用。
    發表于 01-29 10:51 ?2次下載
    C++的實驗教程之<b class='flag-5'>函數</b>的<b class='flag-5'>遞歸</b>算法資料免費下載

    C語言-內聯函數遞歸函數、指針函數

    這篇文章介紹C語言的內聯函數遞歸函數函數指針、指針函數、局部地址、const關鍵字、extern關鍵字等知識點;這些知識點在實際項目開發
    的頭像 發表于 08-14 10:03 ?1697次閱讀

    遞歸代碼都轉為非遞歸可以嗎

    之所以所有的遞歸都能轉為迭代算法是因為遞歸借助函數調用,函數調用本身就是基于調用棧這種結構實現的,只不過這一切都是自動完成的,我們當然也可以用代碼手動模擬出來。
    的頭像 發表于 02-17 14:35 ?759次閱讀
    <b class='flag-5'>遞歸</b>代碼都轉為非<b class='flag-5'>遞歸</b>可以嗎

    Python支持遞歸函數

    Python支持遞歸函數——即直接或間接地調用自身以進行循環的函數遞歸是頗為高級的話題,并且它在Python中相對少見。然而,它是一項應該了解的有用的技術,因為它允許程序遍歷擁有任意
    的頭像 發表于 02-21 14:28 ?656次閱讀

    函數遞歸-3

    程序調用自身的編程技巧稱為遞歸(recursion)。遞歸作為一種算法在程序設計語言中廣泛應用。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個
    的頭像 發表于 02-21 15:57 ?590次閱讀

    什么是Python的遞歸函數

    遞歸函數必須有終止條件。編程中,函數的調用要占用名叫棧(stack)的內存空間。調用函數時,程序會將相關的數據存儲到計算機的棧里。
    的頭像 發表于 02-23 10:25 ?1837次閱讀

    C語言,你真的懂遞歸了嗎?

    要說到遞歸如果不說棧的話,我覺得有點不合適,遞歸特點就是不斷的調用同一個函數,如果這個函數沒有一個遞歸界限,那么就是死循環了,所以討論
    的頭像 發表于 06-06 15:24 ?1022次閱讀
    C語言,你真的懂<b class='flag-5'>遞歸</b>了嗎?

    關于C語言中的遞歸

    遞歸指的是在函數的定義中使用函數自身的方法。
    發表于 02-26 10:34 ?395次閱讀
    關于C語言中的<b class='flag-5'>遞歸</b>
    主站蜘蛛池模板: 四月婷婷七月婷婷综合| 天堂最新版免费观看| xxxxx日本69| 狼色网| 在线视频网址免费播放| 国产大片黄在线看免费| 一区二区亚洲视频| 禁漫羞羞a漫入口| 优优国产在线视频| 亚洲人成伊人成综合网久久| 婷婷影院在线综合免费视频| 亚洲伊人久久综合影院2021| 成 人色 网 站 欧美大片在线观看| xx毛片| 天天狠天天透| 国产亚洲综合视频| 视频在线观看网站免费| 亚欧精品一区二区三区| 在线色av| 色天网站| 久久精品韩国三级| 最新大黄网站免费| 男人天堂资源网| 欧美激情综合色综合啪啪五月| 亚洲视频一区网站| 亚洲欧洲综合网| 三级在线观看网站| 狠狠色丁香久久婷婷| 一本大道高清在线视频 视频| 免费看欧美一级特黄α大片| 视色4setv.com| 在线欧美视频免费观看国产| 三级天堂| 国产看色免费| 深夜在线视频免费网址| 欧美zo| 亚洲情网| 黄色毛片免费| 全免费一级午夜毛片| 5566成人免费视频观看| 亚洲ay|