雜記2

[指針函數(shù)與函數(shù)指針的區(qū)別]

【函數(shù)指針】
在程序運行中棋枕,函數(shù)代碼是程序的算法指令部分,它們和數(shù)組一樣也占用存儲空間券册,都有相應(yīng)的地址〖⑶郑可以使用指針變量指向數(shù)組的首地址,也可以使用指針變量指向函數(shù)代碼的首地址衣屏,指向函數(shù)代碼首地址的指針變量稱為函數(shù)指針躏升。

1.函數(shù)指針定義

函數(shù)類型 (*指針變量名)(形參列表);

“函數(shù)類型”說明函數(shù)的返回類型狼忱,由于“()”的優(yōu)先級高于“*”,所以指針變量名外的括號必不可少膨疏,后面的“形參列表”表示指針變量指向的函數(shù)所帶的參數(shù)列表。

例如:

int (*f)(int x);
double (*ptr)(double x);

在定義函數(shù)指針時請注意:

函數(shù)指針和它指向的函數(shù)的參數(shù)個數(shù)和類型都應(yīng)該是—致的钻弄;

函數(shù)指針的類型和函數(shù)的返回值類型也必須是一致的佃却。

2.函數(shù)指針的賦值

函數(shù)名和數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時窘俺,直接將函數(shù)指針指向函數(shù)名就行了饲帅。

例如,

int func(int x);   /* 聲明一個函數(shù) */

int (*f) (int x);    /* 聲明一個函數(shù)指針 */

f=func;            /* 將func函數(shù)的首地址賦給指針f */

賦值時函數(shù)func不帶括號瘤泪,也不帶參數(shù)灶泵,由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后均芽,指針f就指向函數(shù)func(x)的代碼的首地址丘逸。

3.通過函數(shù)指針調(diào)用函數(shù)

函數(shù)指針是通過函數(shù)名及有關(guān)參數(shù)進行調(diào)用的。

與其他指針變量相類似掀宋,如果指針變量pi是指向某整型變量i的指針深纲,則p等于它所指的變量i;如果pf是指向某浮點型變量f的指針劲妙,則pf就等價于它所指的變量f湃鹊。同樣地,f是指向函數(shù)func(x)的指針镣奋,則f就代表它所指向的函數(shù)func币呵。所以在執(zhí)行了f=func;之后,(*f)和func代表同一函數(shù)侨颈。

由于函數(shù)指針指向存儲區(qū)中的某個函數(shù)余赢,因此可以通過函數(shù)指針調(diào)用相應(yīng)的函數(shù)。現(xiàn)在我們就討論如何用函數(shù)指針調(diào)用函數(shù)哈垢,它應(yīng)執(zhí)行下面三步:

首先妻柒,要說明函數(shù)指針變量。

例如:int (*f)(int x);

其次耘分,要對函數(shù)指針變量賦值举塔。

例如: f=func;    (func(x)必須先要有定義)

最后绑警,要用 (*指針變量)(參數(shù)表);調(diào)用函數(shù)。

例如:    (*f)(x);(x必須先賦值)

【例】任意輸入n個數(shù)央渣,找出其中最大數(shù)计盒,并且輸出最大數(shù)值。

main()
{
        int f();
        int i芽丹,a北启,b;
        int (*p)();    /* 定義函數(shù)指針 */
        scanf("%d",&a);
        p=f;            /* 給函數(shù)指針p賦值志衍,使它指向函數(shù)f */
        for(i=1;i<9;i++)
        {
                scanf("%d"暖庄,&b);
                a=(*p)(a聊替,b);    /* 通過指針p調(diào)用函數(shù)f */
        }
        printf("The Max Number is:%d"楼肪,a)
}

f(int x,int y)
{
    int z;
    z=(x>y)?x:y;
    return(z);
}

運行結(jié)果為:

343 -45 4389 4235 1 -534 988 555 789↙

The Max Number is:4389

【指針函數(shù)】

一個函數(shù)不僅可以帶回一個整型數(shù)據(jù)的值惹悄,字符類型值和實型類型的值春叫,還可以帶回指針類型的數(shù)據(jù),使其指向某個地址單元泣港。

返回指針的函數(shù)暂殖,一般定義格式為:
類型標(biāo)識符    *函數(shù)名(參數(shù)表)
int *f(x,y);

其中x当纱,y是形式參數(shù)呛每,f是函數(shù)名,調(diào)用后返回一個指向整型數(shù)據(jù)的地址指針坡氯。f(x晨横,y)是函數(shù),其值是指針箫柳。

如:char *ch();表示的就是一個返回字符型指針的函數(shù)手形,請看下面的例題:

【例】將字符串1(str1)復(fù)制到字符串2(str2),并輸出字符串2.

#include "stdio.h"
main()
{
    char *ch(char *悯恍,char *);
    char str1[]="I am glad to meet you!";
    char str2[]="Welcom to study C!";
    printf("%s"库糠,ch(str1,str2));
}
char *ch(char *str1涮毫,char *str2)
{
    int i;
    char *p;
    p=str2
    if(*str2==NULL) exit(-1);
    do
    {
        *str2=*str1;
        str1++;
        str2++;
    }while(*str1!=NULL);
    return(p);
}

通過分析可得
函數(shù)指針是一個指向函數(shù)的指針瞬欧,而指針函數(shù)只是說明他是一個返回值為指針的函數(shù)
函數(shù)指針可以用來指向一個函數(shù)。

路由器和交換器的區(qū)別

  • 交換器實現(xiàn)了多臺設(shè)備通過一根網(wǎng)線上網(wǎng)罢防,并且各自之間沒有影響艘虎,各自撥號,一臺設(shè)備上網(wǎng)不會影響其他設(shè)備的網(wǎng)速篙梢。設(shè)備在同一個局域網(wǎng)中顷帖。
  • 路由器同時具備交換和撥號的功能美旧。路由器上了解的設(shè)備也在一個局域網(wǎng)中,但是互相之間是有影響的贬墩,一臺設(shè)備上網(wǎng)會導(dǎo)致其它設(shè)備網(wǎng)速變慢榴嗅。
  • 高端路由器:高端路由器是指在Internet骨干網(wǎng)核心使用、性能優(yōu)良陶舞、具有高密度高速端口和巨大交換容量的新一代路由器產(chǎn)品.通常將背板交換能力大于40Gbits的路由器稱為高端路由器,背板交換能力40Gbits以下的路由器稱為中低端路由器.

二分查找

  • 定義
    二分查找又稱折半查找嗽测,優(yōu)點是比較次數(shù)少,查找速度快肿孵,平均性能好;其缺點是要求待查表為有序表唠粥,且插入刪除困難。因此停做,折半查找方法適用于不經(jīng)常變動而查找頻繁的有序列表晤愧。首先,假設(shè)表中元素是按升序排列蛉腌,將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較官份,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前烙丛、后兩個子表舅巷,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進一步查找前一子表河咽,否則進一步查找后一子表钠右。重復(fù)以上過程,直到找到滿足條件的記錄忘蟹,使查找成功飒房,或直到子表不存在為止,此時查找不成功寒瓦。

  • 遞歸方法

int BinSearch(int Array[],int low,int high,int key/*要找的值*/)  
{  
    if (low<=high)  
    {  
        int mid = (low+high)/2;  
        if(key == Array[mid])  
            return mid;  
        else if(key<Array[mid])  
            return BinSearch(Array,low,mid-1,key);  
        else if(key>Array[mid])  
            return BinSearch(Array,mid+1,high,key);  
    }  
    else  
        return -1;  
}  
  • 非遞歸方法
int BinSearch(int Array[],int SizeOfArray,int key/*要找的值*/)  
{  
    int low=0,high=SizeOfArray-1;  
    int mid;  
    while (low<=high)  
    {  
        mid = (low+high)/2;  
        if(key==Array[mid])  
            return mid;  
        if(key<Array[mid])  
            high=mid-1;  
        if(key>Array[mid])  
            low=mid+1;  
    }  
    return -1;  
}  

static

面向過程

  • 靜態(tài)全局變量:
    該變量在全局?jǐn)?shù)據(jù)區(qū)分配內(nèi)存情屹;靜態(tài)全局變量在聲明它的整個文件都是可見
    的,而在文件之外是不可見的杂腰。靜態(tài)變量都在全局?jǐn)?shù)據(jù)區(qū)分配內(nèi)存垃你,包括后面將要提到的靜態(tài)局部變量也是。
    定義靜態(tài)全局變量還有以下好處:
    靜態(tài)全局變量不能被其它文件所用喂很;其它文件中可以定義相同名字的變量惜颇,不會發(fā)生沖突。

注意:全局變量和全局靜態(tài)變量的區(qū)別

  1. 全局變量是不顯式用static 修飾的全局變量少辣,全局變量默認(rèn)是有外部鏈接性凌摄,作用域是整個工程,在一個文件內(nèi)定義的全局變量漓帅,在另一個文件中锨亏,通過extern 全局變量名的聲明痴怨,就可以使用全局變量。
  2. 全局靜態(tài)變量是顯式用static 修飾的全局變量器予,作用域是聲明此變量所在的文件浪藻,其他的文件即使用extern 聲明也不能使用。
  • 靜態(tài)局部變量
    靜態(tài)局部變量有以下特點:
    該變量在全局?jǐn)?shù)據(jù)區(qū)分配內(nèi)存乾翔;靜態(tài)局部變量在程序執(zhí)行到該對象的聲明處時被首次初始化爱葵,即以后的函數(shù)調(diào)用不再進行初始化;它始終駐留在全局?jǐn)?shù)據(jù)區(qū)反浓,直到程序運行結(jié)束萌丈。但其作用域為局部作用域,當(dāng)定義它的函數(shù)或
    語句塊結(jié)束時雷则,其作用域隨之結(jié)束辆雾。
  • 靜態(tài)函數(shù):
    靜態(tài)函數(shù)與普通函數(shù)不同,它只能在聲明它的文件當(dāng)中可見巧婶,不能被其它文件使用乾颁。定義靜態(tài)函數(shù)的好處:靜態(tài)函數(shù)不能被其它文件所用涂乌;其它文件中可以定義相同名字的函數(shù)艺栈,不會發(fā)生沖突。

面向?qū)ο螅愔械膕tatic 關(guān)鍵字)

  • 靜態(tài)數(shù)據(jù)成員
    靜態(tài)數(shù)據(jù)成員有以下特點:
    對于非靜態(tài)數(shù)據(jù)成員湾盒,每個類對象都有自己的拷貝湿右。而靜態(tài)數(shù)據(jù)成員被當(dāng)作是類的成員。無論這個類的對象被定義了多少個罚勾,靜態(tài)數(shù)據(jù)成員在程序中也只有一份拷貝毅人,由該類型的所有對象共享訪問。

  • 同全局變量相比尖殃,使用靜態(tài)數(shù)據(jù)成員有兩個優(yōu)勢:靜態(tài)數(shù)據(jù)成員沒有進入程序的全局名字空間丈莺,因此不存在與程序中其它全局名字沖突的可能性;
    可以實現(xiàn)信息隱藏送丰。靜態(tài)數(shù)據(jù)成員可以是private 成員缔俄,而全局變量不能;

  • 靜態(tài)成員之間可以相互訪問器躏,包括靜態(tài)成員函數(shù)訪問靜態(tài)數(shù)據(jù)成員和訪問靜態(tài)成員函數(shù)俐载;非靜態(tài)成員函數(shù)可以任意地訪問靜態(tài)成員函數(shù)
    調(diào)用類的靜態(tài)成員函數(shù)。作用static 靜態(tài)變量聲明符登失。在聲明它的程序塊遏佣,子程序塊或函數(shù)內(nèi)部有效,值保持揽浙,在整個程序期間分配存儲器空間状婶,編譯器默認(rèn)值0意敛。

  • 為什么要引入static
    函數(shù)內(nèi)部定義的變量,在程序執(zhí)行到它的定義處時膛虫,編譯器為它在棧上分配空間空闲,大家知道,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉走敌,這樣就產(chǎn)生了一個問題: 如果想將函數(shù)中此變量的值保存至下一次調(diào)用時碴倾,如何實現(xiàn)? 最容易想到的方法是定義一個全局的變量掉丽,但定義為一個全局變量有許多缺點跌榔,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅受此函數(shù)控制)捶障。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僧须,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子项炼,更是在濱河造成了極大的恐慌担平,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锭部,死亡現(xiàn)場離奇詭異暂论,居然都是意外死亡,警方通過查閱死者的電腦和手機拌禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門取胎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湃窍,你說我怎么就攤上這事闻蛀。” “怎么了您市?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵觉痛,是天一觀的道長。 經(jīng)常有香客問我茵休,道長薪棒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任泽篮,我火速辦了婚禮盗尸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帽撑。我一直安慰自己泼各,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布亏拉。 她就那樣靜靜地躺著扣蜻,像睡著了一般逆巍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上莽使,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天锐极,我揣著相機與錄音,去河邊找鬼芳肌。 笑死灵再,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亿笤。 我是一名探鬼主播翎迁,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼净薛!你這毒婦竟也來了汪榔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肃拜,失蹤者是張志新(化名)和其女友劉穎痴腌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燃领,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡士聪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柿菩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戚嗅。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枢舶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情替久,我是刑警寧澤凉泄,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蚯根,受9級特大地震影響后众,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颅拦,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一蒂誉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧距帅,春花似錦右锨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悄窃。三九已至,卻和暖如春蹂窖,著一層夾襖步出監(jiān)牢的瞬間轧抗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工瞬测, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留横媚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓月趟,卻偏偏與公主長得像分唾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狮斗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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

  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,717評論 0 4
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別绽乔? C沒有Protection行為...
    阿面a閱讀 7,663評論 0 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法碳褒,內(nèi)部類的語法折砸,繼承相關(guān)的語法,異常的語法沙峻,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 沙沙沙…是你恣意的聲響睦授,還是文人賦予你的音符,又或是花開時的怦然摔寨,還是柳綠了絲絳的翠然去枷? 云潤了天空,大地把濕嗒傳...
    芳草幽蘭閱讀 174評論 0 1
  • 文:莠子 原創(chuàng)作品是复,轉(zhuǎn)載請聯(lián)系筆下江湖授權(quán)删顶。 魯迅寫道,“我翻開歷史一查淑廊,這歷史沒有年代逗余,歪歪斜斜的每頁上都寫著‘...
    莠子閱讀 3,025評論 2 1