999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一個(gè)難于理解的C++函數(shù)指針問題

2014-01-15 01:18:40王玉山
山東工業(yè)技術(shù) 2014年20期

王玉山

(廣東外語外貿(mào)大學(xué),廣州 510440)

一個(gè)難于理解的C++函數(shù)指針問題

王玉山

(廣東外語外貿(mào)大學(xué),廣州 510440)

摘要:指針是C、C++程序設(shè)計(jì)語言中一個(gè)比較復(fù)雜、難于掌握的概念。但又是任何一個(gè)C、C++程序設(shè)計(jì)者必須過的一道門檻。本文只就其中比較難難于理解的函數(shù)指針的一個(gè)例子加以闡述。希望對(duì)于C、C++程序設(shè)初學(xué)者有所幫助。

關(guān)鍵詞:C++程序設(shè)計(jì);C++函數(shù)指針;

1 什么是指針

指針常量與指針變量統(tǒng)稱為指針。有關(guān)變量(類對(duì)象)、數(shù)組、函數(shù)、字符串常量的地址值都是地址常量,它們不能被賦值,只能做右值;可以被賦值的地址變量是指針變量,它們可以做左值也可以作右值。

2 函數(shù)指針

函數(shù)名是函數(shù)代碼段的入口地址,是地址常量,只能做右值;指向函數(shù)的指針變量是用來存放函數(shù)的入口地址的,可以做左值也可以做右值。

3 函數(shù)指針變量的類型與賦值的要求

象普通變量賦值一樣,函數(shù)指針變量的賦值要求右值和左值必須類型一致。什么是函數(shù)指針的類型呢?就是在定義函數(shù)指針時(shí),我們把指針名去掉,剩下的部分就是函數(shù)指針的類型。

4 一個(gè)難于理解的函數(shù)指針的例子

int (*return_fun(char op))(int, int){……}。去掉return_fun(char op)后留下部分為:int (*)(int, int),即為函數(shù)return_fun(char op)返回的類型,是一個(gè)返回值為整形,有2個(gè)整形參數(shù)的函數(shù)。它的形參是字符變量char op。

#include <iostream>

using namespace std;

int add(int a, int b)

{

return a + b;}

int sub(int a,int b)

{

return a-b;

}

int mul(int a, int b)

{

return a * b;

}

int div(int a, int b)

{

return b?a/b:-1;

}

下面定義的return_fun(char op),即為返回指向函數(shù)的指針函數(shù),該函數(shù)參數(shù)是char op。

int (*return_fun(char op))(int, int)

{

switch (op)

{

case '+':return add;//返回函數(shù)的地址,即函數(shù)名。

case '-':return sub;

case '*':return mul;

case '/':return div;

default:

return NULL;

}

}

//s_fp為指向函數(shù)的指針變量,指向有2個(gè)整形參數(shù),返回值為整形的函數(shù)。 這里指向函數(shù)的指針變量 s_fp的右值是:return_ fun(op),return_fun(op)是一個(gè)函數(shù)調(diào)用、返回一個(gè)函數(shù)指針常量,即四個(gè)函數(shù)名add、sub、mul、div之一。

//下面的語句根據(jù)上一步得到的函數(shù)的地址調(diào)用相應(yīng)函數(shù),并返回運(yùn)算結(jié)果。

if (s_fp)return s_fp(a, b);

else return -1;

}

int main(int argc, char** argv){

int a = 800, b = 200;

cout<<a<<"+"<<b<<"="<<calc(a,'+', b )<<endl;

cout<<a<<"-"<<b<<"="<<calc(a, '-', b)<<endl;

cout<<a<<"*"<<b<<"="<<calc(a, '*',b)<<endl;

cout<<a<<"/"<<b<<"="<<calc(a,'/', b )<<endl;

return 0;

}

以上程序在DevC++5.4.2版本下通過試驗(yàn)。

5 函數(shù)指針需要注意的幾個(gè)問題

指向函數(shù)的指針,定義的時(shí)候?yàn)榱吮WC類型一致,少犯錯(cuò)誤。可以把函數(shù)定義的頭部搬到定義的地方,在后面加上分號(hào),把原來的函數(shù)名換為合法的標(biāo)示符。如有函數(shù):int add(int a, int b){return a + b;}。我們就把這個(gè)函數(shù)頭部的函數(shù)名用Psum代替、省掉參數(shù)名、將標(biāo)示符左側(cè)加*號(hào),必須將*號(hào)與標(biāo)示符加括號(hào)進(jìn)行綁定得到:int (* Psum )(int , int);此時(shí)Psum就是可以指向int add(int a, int b){return a + b;}函數(shù)的指針變量了。注意這個(gè)用于綁定的括號(hào)絕對(duì)不能省掉,如果省掉Psum就不是變量了!成了這樣:int * Psum (int , int);這就成了返回整形指針的函數(shù)原形聲明了。Psum也成了常量。

象普通變量一樣,指向函數(shù)的指針變量也必須先定義后使用。

前面函數(shù)頭部為:int (*return_fun(char op))(int, int)的例子中,是一個(gè)比較復(fù)雜的應(yīng)用,該代碼段定義的函數(shù)為return_fun(char op),而函數(shù)return_fun(char op))的返回類型是int (*return_fun(char op))(int,int)中把return_fun(char op)去掉后留下的部分:int (*)(int, int),這是一個(gè)指向函數(shù)的指針類型。在本例中最右側(cè)的括號(hào)(int, int)是絕對(duì)不能省掉的,因?yàn)樗谴_定return_fun(char op)返回類型的關(guān)鍵。

再看以下代碼段:void (*setF1(void (*f)()))(){……}。我們?cè)撊绾卫斫猓慨?dāng)然要從setF1為起點(diǎn),右邊的括號(hào)有幾個(gè),這看起來讓人有點(diǎn)頭暈。這里要特別注意圓括號(hào)的運(yùn)算級(jí)別和結(jié)合性,我們知道圓括號(hào)的優(yōu)先級(jí)是1級(jí),左結(jié)合性。而這里的*號(hào)是間接訪問運(yùn)算符,優(yōu)先級(jí)是1級(jí)。所以應(yīng)該先有setF1(void (*f)()),它是一個(gè)整體,setF1()的參數(shù)是void (*f)(),是一個(gè)指向函數(shù)的指針參數(shù),在void (*setF1(void (*f)()))()中,把setF1(void (*f)())去掉后留下的部分是void (*)()就是函數(shù)setF1的返回類型。

參考文獻(xiàn):

[1]王珊珊等著.C++程序設(shè)計(jì)教程(第2版),北京:機(jī)械工業(yè)出版社,2011年1月第 2 版,ISBN978-7-111-33022-6.

[2]譚浩強(qiáng)著.C程序設(shè)計(jì),第三版,北京, 清華大學(xué)出版社,2005年 7月第3 版,ISBN 7-302-10853- 6/TP·7217.

[3]史上最牛逼的 C++指針 http://wenku.baidu.com/link?url=Mw5lETdR_tZo2-6zbkNmj7pZPb7OiiYPzwrvO0epmv6SAX14UFJ Yq9u3xt5gPwOlM8u1ZKlscq2U-SfUk6GshQooN59vaVJxJAo8YxLDWuy.

主站蜘蛛池模板: 国产精品免费福利久久播放| 国产va在线观看免费| 国产区精品高清在线观看| 911亚洲精品| 成人午夜久久| 国产三级精品三级在线观看| 久久婷婷色综合老司机| 毛片卡一卡二| 欧美日韩亚洲国产主播第一区| 日韩无码黄色| 国产黑丝一区| 亚洲性一区| 国产理论一区| 伊人久久婷婷| 97色婷婷成人综合在线观看| 一级成人a毛片免费播放| 久久久久久尹人网香蕉| 亚洲日韩图片专区第1页| 欧美在线三级| 亚洲AV无码久久精品色欲| 欧美激情网址| 视频一区视频二区中文精品| 免费Aⅴ片在线观看蜜芽Tⅴ| 亚洲成aⅴ人片在线影院八| 高潮爽到爆的喷水女主播视频 | 亚洲日本韩在线观看| 亚洲精品动漫| 欧美成a人片在线观看| 2020久久国产综合精品swag| 国产在线视频导航| 激情五月婷婷综合网| 国产二级毛片| 免费无码AV片在线观看中文| 亚洲欧州色色免费AV| 亚洲精品色AV无码看| 2018日日摸夜夜添狠狠躁| 91精品国产综合久久香蕉922| 最新亚洲av女人的天堂| 伊人大杳蕉中文无码| 夜夜操狠狠操| 尤物国产在线| 欧美成在线视频| 最新国产午夜精品视频成人| 国产精品午夜福利麻豆| 成人午夜福利视频| 色婷婷久久| AV网站中文| 国产精品一区在线观看你懂的| 亚洲三级成人| 青青草原国产av福利网站| 免费看黄片一区二区三区| 91亚洲免费视频| 亚洲欧洲综合| 99在线视频免费| 国产微拍精品| 国产精品一区二区国产主播| 高清无码一本到东京热| 青青操国产视频| 91久久性奴调教国产免费| 国产喷水视频| 国产日本欧美在线观看| 香蕉在线视频网站| 亚洲最新在线| 99久久国产精品无码| 亚洲二区视频| 污视频日本| 亚洲三级电影在线播放| 女人爽到高潮免费视频大全| 午夜欧美在线| 国产网友愉拍精品| 伊人久久大线影院首页| 99久久亚洲综合精品TS| 91精品国产91久无码网站| 成人在线第一页| 亚洲成人在线网| 无码人妻热线精品视频| 一本大道视频精品人妻| 在线一级毛片| 日韩欧美成人高清在线观看| 91在线无码精品秘九色APP| 国产成人AV男人的天堂| 91小视频在线观看免费版高清|