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.

主站蜘蛛池模板: 美女内射视频WWW网站午夜 | 99久久国产综合精品2023| 久久国产精品嫖妓| 黄色三级毛片网站| 国产门事件在线| 亚洲区第一页| 欧美啪啪网| 999福利激情视频| 五月天久久综合| 99在线视频网站| 亚洲午夜福利在线| 国产精品成人免费视频99| 国产va在线观看| 亚洲va视频| 黄色网在线| 免费观看成人久久网免费观看| 国产精品久久久久久久伊一| 另类重口100页在线播放| 欧美视频在线不卡| 在线观看热码亚洲av每日更新| 成人综合久久综合| a级免费视频| 2020国产免费久久精品99| 国产成人1024精品下载| 亚洲精品无码专区在线观看 | 欧美高清国产| 青青草原国产av福利网站| 成人福利一区二区视频在线| 无码一区中文字幕| 亚洲国产午夜精华无码福利| 国内精品久久久久鸭| 欧美亚洲一二三区| 国产精品永久免费嫩草研究院| h视频在线播放| 中国丰满人妻无码束缚啪啪| 欧美日韩国产一级| 日本高清免费一本在线观看| 国产在线无码av完整版在线观看| 中文字幕在线看| 成AV人片一区二区三区久久| 香蕉久久永久视频| 欧美成人午夜在线全部免费| 免费人成网站在线观看欧美| 国产精品免费露脸视频| 无码日韩精品91超碰| 91免费观看视频| 国产精品自拍合集| 国产在线八区| 美女被躁出白浆视频播放| 不卡色老大久久综合网| 2022国产无码在线| 美女一级免费毛片| 99草精品视频| 午夜小视频在线| 色九九视频| 久久国产精品电影| 亚洲首页在线观看| 精品无码视频在线观看| 欧美午夜在线播放| 国产一二三区在线| 亚洲色欲色欲www网| 狠狠v日韩v欧美v| 国产精品免费入口视频| 国产精品自在拍首页视频8| 男女性色大片免费网站| 人妻21p大胆| 国产农村妇女精品一二区| www.亚洲一区| 国产欧美日韩一区二区视频在线| 2021国产v亚洲v天堂无码| 六月婷婷激情综合| 亚洲第七页| 国产在线精品人成导航| 女人爽到高潮免费视频大全| 操操操综合网| 国产人人射| 日韩精品久久久久久久电影蜜臀| 午夜激情婷婷| 男人的天堂久久精品激情| 国产sm重味一区二区三区| 国产免费黄| 久久精品一卡日本电影|