内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

C語(yǔ)言學(xué)習(xí)(4)第四章函數(shù)-創(chuàng)新互聯(lián)

第四章 函數(shù) 4.1函數(shù)的概念

函數(shù)是C語(yǔ)言的功能單位,實(shí)現(xiàn)一個(gè)功能可以封裝一個(gè)函數(shù)來(lái)實(shí)現(xiàn),定義函數(shù)的時(shí)候一切以功能為目的,根據(jù)功能去定函數(shù)的參數(shù)和返回值。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、西藏網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開(kāi)發(fā)商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為西藏等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

封裝的目的是為了方便函數(shù)的復(fù)用,只需要在使用某個(gè)功能的時(shí)候調(diào)用該函數(shù)即可;也是為了程序的模塊化,方便閱讀,方便調(diào)試。

4.2函數(shù)的分類(lèi) 4.2.1從定義角度分類(lèi)(即函數(shù)是誰(shuí)實(shí)現(xiàn)的)

(1)庫(kù)函數(shù):C庫(kù)實(shí)現(xiàn)的;

(2)自定義函數(shù):程序員自己實(shí)現(xiàn)的函數(shù);

(3)系統(tǒng)調(diào)用:操作系統(tǒng)實(shí)現(xiàn)的函數(shù)。

4.2.2從參數(shù)角度分類(lèi)

(1)有參函數(shù)

函數(shù)有形參,參數(shù)的數(shù)量、類(lèi)型等完全取決于函數(shù)的功能,依需要實(shí)現(xiàn)的功能來(lái)確定。

int max(int x,int y)

{

}

int fun(int x,float y,double z)

{

}

(2)無(wú)參函數(shù)

函數(shù)沒(méi)有參數(shù),在形參出可寫(xiě)void,也可以不寫(xiě)

int fun()

{

}

int fun(void)

{

}
4.3.3從返回值角度分類(lèi)

(1)帶返回值的函數(shù)

在定義函數(shù)的時(shí)候必須帶著返回值類(lèi)型,函數(shù)體中必須有return,如果沒(méi)有返回值類(lèi)型,默認(rèn)返回整形。

char fun()//定義了一個(gè)返回字符數(shù)據(jù)的函數(shù)

{

char b = 'a';

return b;

}

fun()//沒(méi)有定義返回值的類(lèi)型,默認(rèn)返回整形。

{

return 1;

}

(2)沒(méi)有返回值的函數(shù)

定義函數(shù)時(shí)函數(shù)名前面加上void

void fun(形參表)

{

return;

}

沒(méi)有返回值,不需要return。若需要使用return結(jié)束函數(shù)的調(diào)用,可用return;即可

#includeint max(int x, int y)//函數(shù)max的返回值是int類(lèi)型,有兩個(gè)形參x,y,函數(shù)的作用是求兩個(gè)數(shù)的大值

{

int z;

if (x >y)

{

z = x;

}

else

{

z = y;

}

return z;

}


void help(void)//前面一個(gè)void表示沒(méi)有返回值,后面一個(gè)void表示沒(méi)有形參

{

printf("****************\n");

printf("幫助信息********\n");

printf("****************\n");

}


int main()

{

int num;

num = max(5, 10);  //調(diào)用max函數(shù),求5 和 10兩個(gè)數(shù)的大值

help(); //調(diào)用help函數(shù),help是無(wú)參函數(shù),不需要傳參

printf("%d", num);

return 0;

}

運(yùn)行的結(jié)果是:

****************

幫助信息********

****************

10

4.3函數(shù)的定義

返回值類(lèi)型 函數(shù)名字(形參列表)

{//函數(shù)體,實(shí)現(xiàn)函數(shù)的功能

}

函數(shù)名字應(yīng)見(jiàn)名知意,簡(jiǎn)潔易懂,符號(hào)C語(yǔ)言命名規(guī)則,不能重名。

形參必須定義類(lèi)型,多個(gè)形參用逗號(hào),分隔。

函數(shù)的定義不能嵌套,不能在一個(gè)函數(shù)體內(nèi)定義另一個(gè)函數(shù),即每個(gè)函數(shù)都是平行的。

void fun1()

{

void fun2()

{

}

}

報(bào)錯(cuò):C2601 本地函數(shù)定義是非法的。

void fun1()

{

}

void fun2()

{

}

這樣的定義是正確的。

4.4函數(shù)的聲明

1、概念:對(duì)已經(jīng)定義的函數(shù)進(jìn)行說(shuō)明,可以聲明多次

2、為什么要聲明:編譯器在編譯C程序時(shí)是從上往下編譯的,在編譯到調(diào)用的函數(shù)時(shí)編譯器可能不認(rèn)識(shí)這個(gè)函數(shù),所以需要對(duì)函數(shù)進(jìn)行聲明。

3、什么時(shí)候要聲明

(1)主調(diào)函數(shù)和被調(diào)函數(shù)在同一個(gè).c文件中時(shí)

a.被調(diào)函數(shù)再上,主調(diào)函數(shù)在下(不需要聲明)

void fun(void)

{

printf("hello world\n");

}

int main()

{

fun();

}

編譯器先處理了被調(diào)用的函數(shù),已經(jīng)認(rèn)識(shí)了這個(gè)函數(shù),之后再調(diào)用這個(gè)函數(shù)時(shí)就不用聲明了。

b.被調(diào)函數(shù)在下,主調(diào)函數(shù)在上(需要聲明)

int main()

{

fun();

}

void fun(void)

{

printf("hello world\n");

}

編譯器還沒(méi)有認(rèn)識(shí)fun函數(shù)時(shí)就去調(diào)用了,所以這時(shí)需要聲明。

聲明的方法

(1)直接聲明法:

將被調(diào)用的函數(shù)的第一行拷貝過(guò)去,結(jié)尾加分號(hào)。

void fun(void);

void fun(void)

{

printf("hello world\n");

}

(2)間接聲明法:

將函數(shù)的聲明放在頭文件中,.c文件包含頭文件即可,

a.c

#include#include"4_3.h"

int main()

{

fun();

}

void fun(void)

{

printf("hello world\n");

}


a.h

extern void fun(void);

(2)主調(diào)函數(shù)和被調(diào)函數(shù)不在同一個(gè).c文件中的時(shí)候

一定要聲明,聲明的方法:

a.直接聲明法:將被調(diào)函數(shù)的第一行拷貝過(guò)去,后面加分號(hào),前面加extern

b.間接聲明法:將函數(shù)的聲明放在頭文件中,.c文件包含頭文件即可,

直接聲明法

間接聲明法:

3、分文件:主函數(shù)放在一個(gè).c,被調(diào)函數(shù)放在另一個(gè).c,函數(shù)的聲明放在頭文件中,在主調(diào)函數(shù)前用#include "xx.h"間接聲明。

4.5函數(shù)的調(diào)用

函數(shù)的調(diào)用方法:

帶返回值的函數(shù):變量 = 函數(shù)名(實(shí)參列表);

無(wú)返回值的函數(shù):函數(shù)名(實(shí)參列表);

1、有無(wú)返回值

有返回值的函數(shù)需要一個(gè)變量去接收返回值,而沒(méi)有返回值的函數(shù)不需要接收,

2、有無(wú)形參

有形參的函數(shù),就把實(shí)參寫(xiě)在實(shí)參列表,實(shí)參可以是常量、變量,也可以是一個(gè)表達(dá)式,沒(méi)有形參就不寫(xiě)。

形參是變量,是被調(diào)函數(shù)的局部變量。

4.6變量的存儲(chǔ)類(lèi)別 4.6.1 內(nèi)存的分區(qū)

1、內(nèi)存:物理內(nèi)存、虛擬內(nèi)存

物理內(nèi)存:實(shí)在存在的存儲(chǔ)設(shè)備,內(nèi)存條、硬盤(pán)等等

虛擬內(nèi)存:操作系統(tǒng)虛擬出來(lái)的內(nèi)存。

操作系統(tǒng)會(huì)在物理內(nèi)存和虛擬內(nèi)存之間做映射,32位系統(tǒng)下,每個(gè)進(jìn)程的尋址范圍是4G,地址是0x00 00 00 00~ 0x ff ff ff ff

數(shù)據(jù)存放在物理內(nèi)存,我們看到的是虛擬地址。

2、運(yùn)行程序時(shí)操作系統(tǒng)會(huì)將虛擬內(nèi)存4G進(jìn)行分區(qū),方便對(duì)內(nèi)存進(jìn)行管理

(1)堆區(qū):在動(dòng)態(tài)申請(qǐng)內(nèi)存的時(shí)候,在堆里開(kāi)辟內(nèi)存

(2)棧區(qū):主要存放局部變量

(3)靜態(tài)全局區(qū):

a.未初始化的靜態(tài)全局區(qū):靜態(tài)變量(定義時(shí)用static修飾的變量),或全局變量,沒(méi)有初始化的放在此區(qū);

b.初始化的靜態(tài)全局區(qū):全局變量、靜態(tài)變量、賦過(guò)初值的放在此區(qū)。

(4)代碼區(qū):存放程序代碼

(5)文字常量區(qū):存放常量

4.6.2普通的全局變量

概念:在函數(shù)外部定義的變量

int num = 100;//num沒(méi)有在函數(shù)體內(nèi)部定義,而是在函數(shù)外面定義的,那么num就是一個(gè)全局變量

int main()

{

}

普通全局變量的作用范圍:程序的所有地方,在所在的.c文件可以不聲明,而在別的.c文件調(diào)用時(shí)需要聲明:extern int num;(聲明的時(shí)候不要賦值)

生命周期:在程序運(yùn)行的時(shí)候一直存在,直到程序結(jié)束

注意:定義普通全局變量的時(shí)候如果不賦初值,默認(rèn)初值為0。

#includeint num;

int main()

{

printf("num = %d", num);

return 0;

}

運(yùn)行的結(jié)果:num = 0

4.6.3 靜態(tài)全局變量 static

概念:定義全局變量時(shí)前面用static修飾

static int num = 100;//num就是一個(gè)靜態(tài)全局變量

int mian()

{

}

靜態(tài)全局變量的作用范圍:只能作用在其所在的.c文件中,在其他的.c文件中不能使用。

生命周期:在程序運(yùn)行的時(shí)候一直存在,直到程序結(jié)束

注意:定義靜態(tài)全局變量的時(shí)候如果不賦初值,默認(rèn)初值為0。

4.6.4 普通局部變量

概念:在函數(shù)內(nèi)部定義的,或者復(fù)合語(yǔ)句中定義的變量

int main()

{

int num;//普通局部變量,在函數(shù)內(nèi)部定義的

{

int a;//普通局部變量,在復(fù)合語(yǔ)句中定義的

}

}

普通局部變量的作用范圍:在函數(shù)內(nèi)部定義的只在函數(shù)內(nèi)部有效,而在復(fù)合語(yǔ)句中定義的只在復(fù)合語(yǔ)句中有效

生命周期:在函數(shù)調(diào)用之前,局部變量不占用空間,只在調(diào)用函數(shù)的時(shí)候才會(huì)為局部變量開(kāi)辟空間,函數(shù)結(jié)束了局部變量就被釋放了,在復(fù)合語(yǔ)句中也是如此

注意:普通局部變量不賦初值,默認(rèn)的初值是隨機(jī)的。

#includevoid fun()

{

int num = 3;//只在fun內(nèi)部有效的局部變量

num++;

printf("num = %d\n", num);

}

void fun2(int x)//這里定義的x形參也是只在fun2內(nèi)部有效的局部變量

{

x++;

printf("x = %d\n",x);

}


int main()

{

fun();

fun();

fun();

fun2(3);

fun2(3);

return 0;

}

運(yùn)行的結(jié)果:

num = 4

num = 4

num = 4

x = 4

x = 4

在第一次調(diào)用fun時(shí),為局部變量num開(kāi)辟空間,在函數(shù)結(jié)束后局部變量就被釋放了,所以在第二次調(diào)用fun時(shí),num依然是原來(lái)的num。

fun2()同理。

4.6.5 靜態(tài)局部變量

概念:在定義局部變量時(shí)前面加static修飾

作用范圍:在它定義的函數(shù)或復(fù)合語(yǔ)句中有效

生命周期:靜態(tài)局部變量從第一次調(diào)用函數(shù)到程序結(jié)束,而不是像普通局部變量一樣函數(shù)結(jié)束就釋放掉。

注意:普通局部變量不賦初值,默認(rèn)的初值是0。

#includevoid fun()

{

static int num = 3;//只在fun內(nèi)部有效的靜態(tài)局部變量

num++;

printf("num = %d\n", num);

}


int main()

{

fun();

fun();

fun();

return 0;

}

運(yùn)行的結(jié)果是:

num = 4

num = 5

num = 6

變量重名的問(wèn)題

在完全相同的作用范圍內(nèi),不允許重名;作用范圍不同的可以重名;局部范圍內(nèi),重名的全局變量不起作用。(就近原則)

不能定義兩個(gè)同名的全局變量,在一個(gè)函數(shù)內(nèi)部也不能定義兩個(gè)同名的局部變量。

全局變量num,局部變量num:在函數(shù)內(nèi)部只認(rèn)局部變量定義的num, 不認(rèn)全局變量的num。

#includeint num = 100;

int main()

{

int num = 10;

printf("num = %d\n", num);

return 0;

}

運(yùn)行的結(jié)果是:num = 10

說(shuō)明這里打印的num是main函數(shù)內(nèi)部定義的局部變量,而不是外部定義的全局變量

4.6.6外部函數(shù)

我們定義的普通函數(shù)都是外部函數(shù),即函數(shù)可以再程序中的任何文件中調(diào)用。

聲明用extern + 返回值 + 函數(shù)名 + (形參表);

4.6.7內(nèi)部函數(shù)

在定義函數(shù)時(shí),static + 返回值 + 函數(shù)名 + (形參表);即用static修飾的函數(shù)成為內(nèi)部函數(shù)。

static限定了內(nèi)部函數(shù)的作用范圍,只在所在的.c內(nèi)部有效,不能在其他的.c文件中調(diào)用。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前文章:C語(yǔ)言學(xué)習(xí)(4)第四章函數(shù)-創(chuàng)新互聯(lián)
文章起源:http://www.rwnh.cn/article20/doecco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)網(wǎng)站改版、定制網(wǎng)站Google、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
岳普湖县| 施秉县| 斗六市| 辽中县| 会东县| 清河县| 会昌县| 两当县| 黑龙江省| 托克托县| 招远市| 连城县| 南昌县| 谷城县| 库尔勒市| 灵川县| 咸宁市| 兴隆县| 鹤山市| 延庆县| 如皋市| 昭通市| 元朗区| 肥东县| 读书| 华阴市| 岳池县| 珲春市| 长子县| 凤台县| 梓潼县| 连云港市| 丽水市| 汶上县| 横峰县| 民权县| 哈尔滨市| 慈溪市| 孟州市| 扬州市| 闻喜县|