C函數(shù)

函數(shù)(function)既有函數(shù)也有功能的意思,從本質(zhì)上說,函數(shù)就是用來完成一定功能的禾乘。

設(shè)計(jì)程序時(shí)冗荸,往往會(huì)將較大的程序切分為若干的模塊,每個(gè)模塊包含多個(gè)函數(shù)冬竟,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定功能。


程序執(zhí)行過程
函數(shù)
  • 從用戶使用角度看,除了可使用庫函數(shù)外改艇,還可編寫專用函數(shù)以供專人使用。
  • 從函數(shù)形式看坟岔,函數(shù)分為無參函數(shù)谒兄、有參函數(shù)。

每個(gè)函數(shù)體都是一個(gè)塊社付,因此在函數(shù)內(nèi)聲明的自動(dòng)變量是函數(shù)的本地變量舵变。

函數(shù)的定義

C語言要求酣溃,程序中使用的函數(shù),必須先定義后使用纪隙。

類型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)列表)
{
  聲明部分
  語句部分
}

函數(shù)聲明(declearation)的作用是把函數(shù)名赊豌、函數(shù)參數(shù)個(gè)數(shù)和類型等信息通知編譯器,以便在遇到函數(shù)調(diào)用時(shí)绵咱,編譯系統(tǒng)能正確識(shí)別函數(shù)并檢查調(diào)用是否合法碘饼。

#include <stdio.h>

void star()
{
    printf("********\n");
}
void message()
{
    printf("hello world\n");
}

int main()
{
    void star();
    void message();

    star();//********
    message();//hello world

    return 0;
}

函數(shù)名

函數(shù)名是指向函數(shù)的指針,函數(shù)名是指針變量(引用存儲(chǔ)器中某樣?xùn)|西的方法)悲伶。
當(dāng)創(chuàng)建函數(shù)同時(shí)也會(huì)創(chuàng)建一個(gè)函數(shù)名的指針變量艾恼,變量中保存函數(shù)地址。
只要把函數(shù)指針類型的參數(shù)傳遞給函數(shù)麸锉,就能調(diào)用它指向的函數(shù)钠绍。

void nl(void){
    print("\n");
}

nl();

形參和實(shí)參

  • 在定義函數(shù)時(shí)指定的形參,在函數(shù)未調(diào)用時(shí)花沉,形參并不占內(nèi)存中的存儲(chǔ)單元柳爽。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)形參才被分配內(nèi)存單元碱屁。在調(diào)用結(jié)束后磷脯,形參所占用的內(nèi)存單元也會(huì)被釋放掉。
$ vim max.c
#include <stdio.h>

int max(int x,int y)
{
    return x>y ? x : y;
}

int main(void)
{
    int x,y;
    scanf("%d %d", &x, &y);
    printf("x=%d y=%d max=%d\n", x, y, max(x,y));

    return 0;
}
$ gcc max.c -o max
$ max
  • 實(shí)參向形參的數(shù)據(jù)傳遞的是“值傳遞”娩脾,單向傳遞只能由實(shí)參傳給形參赵誓,而不能由形參傳給實(shí)參。實(shí)參和形參在內(nèi)存中占不同的存儲(chǔ)單元柿赊,實(shí)參無法得到形參的值俩功。

參數(shù)調(diào)用順序

#include <stdio.h>

int max(int x,int y)
{
    return x>y ? x : y;
}

void nl(void){
    printf("\n");
}

int main(void)
{
    int x = 1;
    printf("x=%d y=%d max=%d", x, ++x, max(x,++x));// x=3 y=3 max=2
    nl();

    return 0;
}

局部變量

每個(gè)變量都有一個(gè)作用域問題,即它們?cè)谑裁捶秶鷥?nèi)有效碰声。

定義變量可能有三種情況

  • 在函數(shù)開頭定義
  • 在函數(shù)內(nèi)的復(fù)合語句內(nèi)定義
  • 在函數(shù)的外部定義

注意

  • 主函數(shù)中定義的變量只在主函數(shù)中有效
  • 不同函數(shù)中可使用同名變量
  • 形參是局部變量
  • 函數(shù)內(nèi)部绑雄,可在復(fù)合語句中定義變量,它們只在復(fù)合語句中有效奥邮,這種復(fù)合語句稱為“分程序”或“程序塊”万牺。

全局變量

程序的編譯單位是源程序文件,源文件可包含一個(gè)或多個(gè)函數(shù)洽腺。
在函數(shù)內(nèi)定義的變量是局部變量脚粟,在函數(shù)之外定義的變量稱為外部變量,外部變量是全局變量蘸朋。
全局變量可為本文件中其他函數(shù)所公用核无,它的有效范圍為從定義變量的位置開始到源文件結(jié)束。

為了便于區(qū)別全局變量和局部變量藕坯,C程序設(shè)計(jì)人員有一個(gè)習(xí)慣团南,將全局變量首字母大寫噪沙。

#include <stdio.h>

float Max=0,Min=0;
int main()
{
    int length = 3;
    float average(int arr[], int length);   
    int i, arr[length];
    float avg;

    printf("please enter %d integer:\n", length);
    for(i=0; i<length; i++){
        scanf("%d", &arr[i]);
    }

    avg = average(arr, length);
    printf("max = %6.2f\nmin = %6.2f\navg = %6.2f\n", Max, Min, avg);

    return 0;
}

float average(int arr[], int length)
{
    int i;
    float sum, avg;

    Max = arr[0];
    Min = arr[0];
    sum = arr[0];

    for(i=1; i<length; i++){
        if(arr[i]>Max){
            Max = arr[i];
        }else if(arr[i] < Min){
            Min = arr[i];
        }
        sum = sum + arr[i];
    }

    avg = sum/length;
    return avg;
}

建議不在必要情況不要使用全局變量

  • 全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開辟單元吐根。
  • 全局變量會(huì)使通用性降低正歼,若函數(shù)中引用全局變量,那么執(zhí)行情況會(huì)受到有關(guān)的外部變量的影響拷橘。
  • 全局變量過多會(huì)降低程序的清晰性
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末局义,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冗疮,更是在濱河造成了極大的恐慌萄唇,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术幔,死亡現(xiàn)場(chǎng)離奇詭異另萤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诅挑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門四敞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揍障,你說我怎么就攤上這事目养×┯桑” “怎么了毒嫡?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)幻梯。 經(jīng)常有香客問我兜畸,道長(zhǎng),這世上最難降的妖魔是什么碘梢? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任咬摇,我火速辦了婚禮,結(jié)果婚禮上煞躬,老公的妹妹穿的比我還像新娘肛鹏。我一直安慰自己,他們只是感情好恩沛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布在扰。 她就那樣靜靜地躺著,像睡著了一般雷客。 火紅的嫁衣襯著肌膚如雪芒珠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天搅裙,我揣著相機(jī)與錄音皱卓,去河邊找鬼裹芝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娜汁,可吹牛的內(nèi)容都是我干的嫂易。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼存炮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炬搭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穆桂,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤宫盔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后享完,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灼芭,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年般又,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彼绷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茴迁,死狀恐怖寄悯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堕义,我是刑警寧澤猜旬,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站倦卖,受9級(jí)特大地震影響洒擦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怕膛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一熟嫩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褐捻,春花似錦掸茅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至边苹,卻和暖如春陵且,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工慕购, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留聊疲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓沪悲,卻偏偏與公主長(zhǎng)得像获洲,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殿如,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 函數(shù) c語言程序可由一個(gè)主函數(shù)和若干其它函數(shù)構(gòu)成贡珊,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能。主函數(shù)調(diào)用其他函數(shù)涉馁,其它函數(shù)也可以互...
    去留無意hmy閱讀 408評(píng)論 0 2
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型门岔。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)烤送; ...
    朱森閱讀 3,424評(píng)論 3 44
  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用寒随。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,588評(píng)論 1 19
  • 分享一支跟秋天有關(guān)的曲子妻往。 我們先看這支琴曲的詞。 什么试和?讯泣!還有詞? 沒錯(cuò)阅悍,很多古琴曲都是可以唱出來的好渠,追溯到先秦...
    魚小既閱讀 341評(píng)論 0 1
  • 44/100 男孩,13歲溉箕,初二 烏云避日晦墙,有壓力吧悦昵,最近情緒不佳肴茄,樹遮掩了房子,掩飾內(nèi)心的想法但指,內(nèi)心孤獨(dú)寡痰,渴望陪...
    于小小小小小瑞閱讀 171評(píng)論 0 0