43_函數(shù)的意義

0:C語言程序是由什么來構(gòu)成草则?

C語言程序主要是由函數(shù)間的相互調(diào)用來構(gòu)成的。C語言中函數(shù)為核心鞍陨。

1. C語言中的函數(shù)

  • 函數(shù)的由來


    函數(shù)的由來

2. 函數(shù)的意義

  • 模塊化程序設(shè)計


    模塊化程序設(shè)計
  • C語言中的模塊化


    C語言中的模塊化

3. 面向過程的程序設(shè)計

  • 面向過程是一種以過程為中心的編程思想
  • 首先將復(fù)雜的問題分解為一個個容易解決的問題
  • 分解過后的問題可以按照步驟一步步完成
  • 函數(shù)是面向過程在C語言中的體現(xiàn)
  • 解決問題的每個步驟可以用函數(shù)來實現(xiàn)

4. 聲明和定義

  • 聲明的意義在于告訴編譯器程序單元的存在帜矾,編譯器只是知道程序單元的存在嫉嘀,并不知道程序單元是如何存在。
  • 定義則明確指示程序單元的意義,即指明了程序單元是如何存在。
  • C語言中通過extern進行程序單元的聲明亏娜。
  • 一些程序單元在聲明時可以省略extern。
    程序說明:聲明和定義的不同
1.c
---
#include <stdio.h>
#include <malloc.h>

extern int g_var;               // 聲明全局變量蹬挺,  告訴編譯器g_var是存在的维贺,并沒有告訴編譯器是如何存在的,即編譯器編譯到這一行時巴帮,編譯器知道了g_var存在溯泣,不需要給它分配空間,因為在其他的文件中已經(jīng)為g_var分配了空間榕茧。

extern struct Test;     // 聲明結(jié)構(gòu)體

int main()
{
    extern void f(int i, int j);    // 聲明函數(shù)
    extern int g(int x);        // 聲明函數(shù)
    
    struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test));
    
    printf("p = %p\n", p);
    
    //g_var = 10;
    
    printf("g_var = %d\n", g_var);
    
    f(1, 2);
    
    printf("g(3) = %d\n", g(3));
    
    free(p);
    
    return 0;
}
---
global.c
---
#include <stdio.h>

int g_var = 10;

struct Test
{
    int x;
    int y;
};

void f(int i, int j)
{
    printf("i + j = %d\n", i + j);
}

int g(int x)
{
    return (int)(2 * x + g_var);
}

輸出結(jié)果:

p = (nil)
g_var = 10
i + j = 3
g(3) = 16

上面程序很好的演示了聲明和定義的方式垃沦;下面程序中將給p指針分配內(nèi)存空間,觀察輸出結(jié)果

#include <stdio.h>
#include <malloc.h>

extern int g_var;               // 聲明全局變量雪猪,  告訴編譯器g_var是存在的栏尚,并沒有告訴編譯器是如何存在的,即編譯器編譯到這一行時只恨,編譯器知道了g_var存在译仗,不需要給它分配空間,因為在其他的文件中已經(jīng)為g_var分配了空間官觅。

extern struct Test;     // 聲明結(jié)構(gòu)體

int main()
{
    extern void f(int i, int j);    // 聲明函數(shù)
    extern int g(int x);        // 聲明函數(shù)
    
    struct Test* p = (struct Test*)malloc(sizeof(struct Test));
    
    printf("p = %p\n", p);
    
    //g_var = 10;
    
    printf("g_var = %d\n", g_var);
    
    f(1, 2);
    
    printf("g(3) = %d\n", g(3));
    
    free(p);
    
    return 0;
}

輸出結(jié)果:

1.c:13:47: error: invalid application of ‘sizeof’ to incomplete type ‘struct Test’
  struct Test* p = (struct Test*)malloc(sizeof(struct Test));

出錯原因:編譯器編譯到p指針時纵菌,p需要得到堆內(nèi)存中的一片連續(xù)內(nèi)存空間,這片連續(xù)空間的大小需要通過sizeof(struct Test)獲得休涤,struct Test為結(jié)構(gòu)體類型咱圆,struct Test在此文件中只聲明沒有定義,編譯器不知道struct Test的大小功氨。

總結(jié):

  • 在C語言中序苏,變量的定義必然伴隨的內(nèi)存的分配。變量的聲明僅僅是告訴編譯器有這樣的標識捷凄,不會去分配內(nèi)存空間忱详。
  • C編譯器在編譯時,不會依賴文件之間的編譯順序跺涤。

5. 小結(jié)

  • 函數(shù)是面向過程思想在C語言中的體現(xiàn)匈睁;
  • 面向過程是由上至下分解問題的設(shè)計方式;
  • 程序中的定義聲明完全不同桶错;
  • C語言中通過過extern對程序單元進行聲明
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末航唆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院刁,更是在濱河造成了極大的恐慌糯钙,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異任岸,居然都是意外死亡鸳玩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門演闭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來不跟,“玉大人,你說我怎么就攤上這事米碰∥迅铮” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵吕座,是天一觀的道長虐译。 經(jīng)常有香客問我,道長吴趴,這世上最難降的妖魔是什么漆诽? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮锣枝,結(jié)果婚禮上厢拭,老公的妹妹穿的比我還像新娘。我一直安慰自己撇叁,他們只是感情好供鸠,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陨闹,像睡著了一般楞捂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趋厉,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天寨闹,我揣著相機與錄音,去河邊找鬼君账。 笑死繁堡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杈绸。 我是一名探鬼主播帖蔓,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼矮瘟,長吁一口氣:“原來是場噩夢啊……” “哼瞳脓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起澈侠,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤劫侧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烧栋,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡写妥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了审姓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珍特。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖魔吐,靈堂內(nèi)的尸體忽然破棺而出扎筒,到底是詐尸還是另有隱情,我是刑警寧澤酬姆,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布嗜桌,位于F島的核電站,受9級特大地震影響辞色,放射性物質(zhì)發(fā)生泄漏骨宠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一相满、第九天 我趴在偏房一處隱蔽的房頂上張望层亿。 院中可真熱鬧,春花似錦立美、人聲如沸棕所。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳省。三九已至,卻和暖如春躲撰,著一層夾襖步出監(jiān)牢的瞬間针贬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工拢蛋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桦他,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓谆棱,卻偏偏與公主長得像快压,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子垃瞧,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

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