青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 8  文章 - 26  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(5)

隨筆檔案

文章分類

文章檔案

相冊

C++語言

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

指針, 指針的指針, 數組, 指針數組, 數組指針, 指針函數, 函數指針-----轉載



--------------指針----------------
int a=10;
int *p=&a;

-------------指針的指針-----------
int b=20;
int *p=&b;
int **p2p=&p;

-------------簡單數組-----------------
int c[10];//整數數組,含有10個整數元素
也就是說每一個元素都是整數

--------------指針數組--------------------
int *p[10];//指針數組,含有10個指針元素
也就是說每一個元素都是指針

--------------數組指針--------------------
int (*p)[10];//數組指針,這個指針能夠用來指向
含有10個元素的整數數組

------------函數指針---------------------

int (*p)( ); // 指向函數的指針...這里聲明了一個指針p,該指針指向返回值是整型(即函數類型為整型)的函數!


----------------指針函數---------------------------

int *p(int a,float b); //返回值為指針的函數...該函數返回指向整型變量的指針!

即該函數的類型為int *, p和上例不同,他是函數名!上例中是指針!

===========================================================================

C/C 中函數指針的含義

作者:管寧

  函數存放在內存的代碼區域內,他們同樣有地址,我們如何能獲得函數的地址呢?

  假如我們有一個int test(int a)的函數,那么,他的地址就是函數的名字,這一點如同數組相同,數組的名字就是數組的起始地址。

  定義一個指向函數的指針用如下的形式,以上面的test()為例:

int (*fp)(int a);//這里就定義了一個指向函數的指針

  函數指針不能絕對不能指向不同類型,或是帶不同形參的函數,在定義函數指針的時候我們很容易犯如下的錯誤。

int *fp(int a);//這里是錯誤的,因為按照結合性和優先級來看就是先和()結合,然后變成了一個返回整形指針的函數了,而不是函數指針,這一點尤其需要注意!

  下面我們來看一個具體的例子:

#include <iostream>
#include <string>
using namespace std;

int test(int a);

void main(int argc,char* argv[])
{
cout<<test<<endl;//顯示函數地址
int (*fp)(int a);
fp=test;//將函數test的地址賦給函數學指針fp
cout<<fp(5)<<"|"<<(*fp)(10)<<endl;
//上面的輸出fp(5),這是標準c 的寫法,(*fp)(10)這是兼容c語言的標準寫法,兩種同意,但注意區分,避免寫的程式產生移植性問題!
cin.get();
}

int test(int a)
{
return a;
}

  typedef定義能夠簡化函數指針的定義,在定義一個的時候感覺不出來,但定義多了就知道方便了,上面的代碼改寫成如下的形式:

#include <iostream>
#include <string>
using namespace std;

int test(int a);

void main(int argc,char* argv[])
{
cout<<test<<endl;
typedef int (*fp)(int a);//注意,這里不是生命函數指針,而是定義一個函數指針的類型,這個類型是自己定義的,類型名為fp
fp fpi;//這里利用自己定義的類型名fp定義了一個fpi的函數指針!
fpi=test;
cout<<fpi(5)<<"|"<<(*fpi)(10)<<endl;
cin.get();
}

int test(int a)
{
return a;
}

  函數指針同樣是能夠作為參數傳遞給函數的,下面我們看個例子,仔細閱讀您將會發現他的用處,稍加推理能夠很方便我們進行一些復雜的編程工作。

//-------------------該例以上一個例子作為基礎稍加了修改-----------------------------
#include <iostream>
#include <string>
using namespace std;

int test(int);

int test2(int (*ra)(int),int);

void main(int argc,char* argv[])
{
cout
<<test<<endl;
typedef int (*fp)(int
);
fp fpi;
fpi=test;
//fpi賦予test 函數的內存地址

cout<<test2(fpi,1)<<endl;//這里調用test2函數的時候,這里把fpi所存儲的函數地址(test的函數地址)傳遞了給test2的第一個形參
cin
.get();
}

int test(int
a)
{
return
a-1;
}

int test2(int (*ra)(int),int b)//這里定義了一個名字為ra的函數指針
{
int c=ra(10) b;//在調用之后,ra已指向fpi所指向的函數地址即test函數
return
c;
}

  利用函數指針,我們能夠構成指針數組,更明確點的說法是構成指向函數的指針數組,這么說可能就容易理解的多了。

#include <iostream>
#include <string>
using namespace std;

void t1(){cout<<"test1";}
void t2(){cout<<"test2";}
void t3(){cout<<"test3";}
void main(int argc,char* argv[])
{
void* a[]={t1,t2,t3};
cout<<"比較t1()的內存地址和數組a[0]所存儲的地址是否一致"<<t1<<"|"<<a[0]<<endl;

cout<<a[0]();//錯誤!指針數組是不能利用數組下標操作調用函數的

typedef void (*fp)();//自定義一個函數指針類型
fp b[]={t1,t2,t3}; //利用自定義類型fp把b[]定義趁一個指向函數的指針數組
b[0]();//現在利用指向函數的指針數組進行下標操作就能夠進行函數的間接調用了;
cin.get();
}

  仔細看上面的例子可能不用我多說大家也會知道是怎么一會事情了,最后我們做一個重點小結,只要記住這一點,對于理解利用函數指針構成數組進行函數間接調用就很容易了!

void* a[]={t1,t2,t3};
cout<<"比較t1()的內存地址和數組a[0]所存儲的地址是否一致"<<t1<<"|"<<a[0]<<endl;

cout<<a[0]();//錯誤!指針數組是不能利用數組下標操作調用函數的

  上面的這一小段中的錯誤行,為什么不能這么調用呢?

  前一篇教程我們已說的很清楚了,但是在這里我們還是復習一下概念,指針數組元素所保存的只是個內存地址,既然只是個內存地址就不可能進行a[0]()這樣地址帶括號的操作,而函數指針不同他是個例外,函數指針只所以這么叫他就是因為他是指向函數指向內存的代碼區的指針,他被系統授予允許和()括號操作的權利,進行間接的函數調用,既然函數指針允許這么操作,那么被定義成函數指針的數組就一定是能夠相同的操作的。


原文地址 http://www.netinter.cn/info/html/chengxusheji/C-C--/20080224/11853.html
posted on 2008-06-11 17:00 楊彬彬 閱讀(197) 評論(0)  編輯 收藏 引用 所屬分類: C++語言
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品一区二区在线观看| 亚洲精品视频一区| 亚洲综合色激情五月| 精品999日本| 国产精品日本精品| 国产伦精品一区二区三区视频孕妇| 欧美人与性禽动交情品| 欧美日韩色综合| 国产精品一区免费在线观看| 国产欧美va欧美va香蕉在| 国产乱码精品一区二区三区忘忧草| 国产精品国产亚洲精品看不卡15| 国产精品久久久久久户外露出| 欧美日韩三级在线| 国产精品久久亚洲7777| 国产一区999| 亚洲国产影院| 午夜精品福利在线| 久久性色av| 亚洲精品一二区| 亚洲欧美国产77777| 久久精品成人一区二区三区蜜臀| 久久综合九色欧美综合狠狠| 欧美日韩三级一区二区| 国产一区二区三区丝袜| 最新日韩在线| 久久精品免费电影| 日韩午夜在线视频| 亚洲国产精品99久久久久久久久| 久久国产成人| 蜜臀av一级做a爰片久久| 欧美日韩免费看| 一区在线观看| 午夜久久久久久久久久一区二区| 久久久久一区二区| 日韩一级片网址| 久久精品动漫| 国产精品久久久久91| 亚洲国产午夜| 久久人人爽人人爽爽久久| 日韩一级精品| 欧美华人在线视频| 激情视频亚洲| 欧美一级专区免费大片| 亚洲人成人一区二区三区| 在线亚洲美日韩| 免费成人在线观看视频| 国产人成精品一区二区三| 99在线热播精品免费99热| 欧美岛国激情| 欧美一区二区精品在线| 欧美午夜不卡在线观看免费 | 亚洲欧美综合一区| 欧美日本一区| 亚洲精品久久久久久下一站| 久久久久久久综合色一本| 亚洲五月六月| 国产精品久久二区二区| 亚洲视频碰碰| 亚洲人成网站777色婷婷| 久久综合九色综合欧美就去吻| 国产日韩欧美一区| 久久国产精品久久久久久| 亚洲永久在线| 国产精品乱子久久久久| 亚洲永久免费精品| 亚洲一区激情| 国产欧美一区二区精品性色 | 欧美激情第4页| 免费在线观看精品| 91久久精品日日躁夜夜躁欧美 | 久久天堂av综合合色| 午夜视黄欧洲亚洲| 国产自产在线视频一区| 久久在线视频在线| 久久一区二区精品| 亚洲黄色精品| 99热在线精品观看| 欧美午夜精品电影| 久久激情五月丁香伊人| 久久九九99| 欧美人与性禽动交情品| 欧美精彩视频一区二区三区| 亚洲午夜精品国产| 亚洲色图制服丝袜| 国内久久婷婷综合| 亚洲国产三级在线| 国产精品久久亚洲7777| 蜜臀a∨国产成人精品| 免费观看成人| 亚洲影视在线| 久久国产视频网| 日韩视频二区| 亚洲综合电影| 亚洲福利av| 一区二区三区精品在线 | 一本色道88久久加勒比精品 | 欧美极品在线观看| 午夜欧美精品| 久久一区国产| 亚洲欧美在线网| 免费不卡欧美自拍视频| 午夜精品久久久久久久白皮肤| 久久久久综合网| 亚洲欧美日韩在线高清直播| 老司机午夜精品视频| 性欧美暴力猛交69hd| 久久综合色天天久久综合图片| 亚洲女人av| 欧美黄色aa电影| 麻豆九一精品爱看视频在线观看免费 | 欧美激情二区三区| 久久爱www久久做| 欧美日本一道本在线视频| 久久综合狠狠综合久久综合88| 欧美色图首页| 亚洲激情综合| 国产综合久久| 在线亚洲精品| 亚洲乱码一区二区| 久久色中文字幕| 久久精品国产一区二区三区| 欧美成人在线免费观看| 久久久久九九视频| 国产女人aaa级久久久级| 亚洲精品欧美在线| 亚洲精品日韩久久| 久久综合狠狠综合久久综合88| 午夜视频在线观看一区二区三区| 欧美精品18videos性欧美| 麻豆精品国产91久久久久久| 国产自产精品| 欧美在线免费观看亚洲| 香蕉成人久久| 国产精品久久久久久久免费软件| 欧美激情视频给我| 国产视频一区在线观看| 亚洲欧美在线免费观看| 香蕉久久一区二区不卡无毒影院| 欧美视频1区| 一区二区三区www| 欧美日韩精品欧美日韩精品| 亚洲三级色网| 欧美韩国一区| 日韩一区二区电影网| 亚洲色无码播放| 欧美视频日韩视频在线观看| 一区二区久久久久| 亚洲一品av免费观看| 国产精品乱人伦一区二区| 亚洲一区二区三区四区五区黄 | 欧美高清在线视频| 在线看片第一页欧美| 免费试看一区| 亚洲日韩中文字幕在线播放| 夜夜嗨av一区二区三区中文字幕 | 亚洲黄色性网站| 99精品国产在热久久| 欧美午夜精品久久久久久久| 亚洲视频在线看| 久久久久久久一区| 91久久精品网| 国产精品美女999| 久久久.com| 亚洲精品久久久久久久久| 亚洲欧美激情视频在线观看一区二区三区| 国产精品一区二区视频| 久久婷婷蜜乳一本欲蜜臀| 亚洲电影一级黄| 亚洲制服少妇| 亚洲国产精品成人久久综合一区| 欧美日韩成人免费| 香蕉久久一区二区不卡无毒影院| 免费看亚洲片| 亚洲男人的天堂在线观看| 国产午夜精品一区二区三区视频| 久久天天狠狠| 一区二区国产精品| 欧美成人69av| 西西裸体人体做爰大胆久久久| 亚洲电影中文字幕| 国产精品免费看久久久香蕉| 久久米奇亚洲| 亚洲女同性videos| 欧美激情第六页| 久久国产精品免费一区| 999亚洲国产精| 在线观看亚洲精品视频| 欧美性猛交xxxx免费看久久久| 久久免费视频观看| 亚洲欧美激情诱惑| 亚洲精品久久久久久久久久久| 久久久蜜臀国产一区二区| 亚洲图片欧美一区| 亚洲韩国青草视频| 一区在线免费| 国产在线精品一区二区夜色| 国产精品高潮久久| 欧美日韩一区二区欧美激情 | 国产日韩欧美91|