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

隨筆 - 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>
            久久国产精品网站| 欧美日韩亚洲一区二区三区在线观看| 久久中文久久字幕| 久久久久久久久久久久久9999| 亚洲一区欧美一区| 香蕉成人伊视频在线观看| 香蕉免费一区二区三区在线观看| 欧美亚洲在线观看| 久久夜色精品国产噜噜av| 另类春色校园亚洲| 欧美激情在线| 亚洲裸体在线观看| 亚洲女性喷水在线观看一区| 欧美在线不卡| 欧美高清视频www夜色资源网| 欧美国产精品劲爆| 国产精品高潮久久| 在线看片第一页欧美| 亚洲欧洲一区二区天堂久久| 一区二区三区高清在线| 久久本道综合色狠狠五月| 欧美成年人视频网站| 在线亚洲精品| 国产精品在线看| 亚洲欧美一级二级三级| 久久精品国产亚洲一区二区| 男人插女人欧美| 国产精品久久久久77777| 国产在线观看一区| 999亚洲国产精| 久久gogo国模裸体人体| 亚洲大胆av| 亚洲手机成人高清视频| 女仆av观看一区| 国产综合一区二区| 这里只有精品视频| 亚洲成人直播| 久久久久久国产精品mv| 国产精品久久久久久久久| 亚洲国产高清一区| 欧美制服丝袜| 中文av一区特黄| 欧美剧在线观看| 亚洲激情欧美激情| 麻豆成人在线| 久久久久久91香蕉国产| 国产毛片一区二区| 亚洲一区二区三区中文字幕在线| 欧美福利视频在线观看| 久久国产精品久久久久久电车| 国产精品久久久久久久久久尿| 亚洲精品欧美极品| 免费人成精品欧美精品| 久久黄色小说| 国内精品**久久毛片app| 性欧美videos另类喷潮| 99re6这里只有精品| 久久精品亚洲一区二区三区浴池| 亚洲美女中文字幕| 欧美精品一区在线观看| 亚洲精品日韩欧美| 欧美成人日韩| 欧美成人一区二区三区| 亚洲精品在线一区二区| 亚洲黄网站在线观看| 美女精品网站| 亚洲精品一区二区在线观看| 亚洲高清在线视频| 欧美人与禽猛交乱配| 在线亚洲一区| 亚洲天堂视频在线观看| 国产精品久久福利| 性欧美超级视频| 午夜激情一区| 在线不卡中文字幕| 亚洲国产影院| 国产精品爱久久久久久久| 亚洲视频在线观看| 亚洲一区二区三区视频| 国产午夜精品视频| 欧美成人中文字幕在线| 欧美精品久久久久久久免费观看| 麻豆精品精品国产自在97香蕉| 亚洲永久精品国产| 国产精品视频网| 卡一卡二国产精品| 欧美精品精品一区| 欧美亚洲在线| 另类亚洲自拍| 亚洲一区二区三区精品动漫| 亚洲欧美综合国产精品一区| 亚洲国产91| 亚洲一二三区精品| 亚洲高清不卡一区| 亚洲一区在线免费| 亚洲黄色av一区| 亚洲综合电影一区二区三区| 亚洲国产精品国自产拍av秋霞| 一区二区高清视频| 在线欧美日韩| 亚洲嫩草精品久久| 日韩视频在线观看国产| 欧美一区二区三区视频| 国产精品99久久久久久人| 久久精品一区二区三区中文字幕 | 欧美精品成人| 久久精品成人一区二区三区| 欧美国产日韩二区| 久久精品视频在线播放| 欧美精品九九99久久| 久久免费视频一区| 国产精品美女久久久久久2018| 麻豆九一精品爱看视频在线观看免费| 欧美日韩精品在线视频| 久久视频在线视频| 国产精品久久久久久久7电影| 亚洲第一在线视频| 激情欧美日韩一区| 亚洲自拍电影| 一本一本久久a久久精品综合麻豆| 国产精品久久77777| 亚洲国产欧美日韩| 久久精品91| 小嫩嫩精品导航| 欧美日韩一卡二卡| 亚洲国产影院| 久久先锋影音| 久久久久久成人| 国产精品爽黄69| 正在播放亚洲| 亚洲欧美日本另类| 欧美色视频在线| 亚洲美女精品久久| aaa亚洲精品一二三区| 欧美成人a视频| 欧美激情中文字幕乱码免费| 亚洲第一成人在线| 媚黑女一区二区| 亚洲激情女人| 亚洲美女视频在线观看| 欧美成在线视频| 亚洲国产一区二区三区青草影视| 亚洲国产综合在线看不卡| 老司机午夜免费精品视频| 99精品视频免费观看视频| 在线观看亚洲精品视频| 欧美精品成人一区二区在线观看 | 国内免费精品永久在线视频| 美女脱光内衣内裤视频久久网站| 久久久五月天| 久久九九久久九九| 国产视频自拍一区| 久久精品视频免费播放| 久色成人在线| 1000部国产精品成人观看| 麻豆成人在线| 亚洲精品欧美激情| 亚洲欧美日韩电影| 国产精品永久入口久久久| 欧美一级黄色网| 欧美激情亚洲另类| 在线视频一区二区| 国产欧美精品一区| 久久综合中文字幕| 日韩一区二区免费高清| 欧美中文在线观看| 亚洲欧洲精品一区二区三区不卡 | 欧美三级网址| 亚洲欧美一区在线| 欧美成人午夜剧场免费观看| 9i看片成人免费高清| 国产欧美91| 欧美激情视频网站| 亚洲欧美日本另类| 亚洲高清视频一区| 亚洲欧美电影在线观看| 亚洲高清视频中文字幕| 国产精品久久久久久久电影 | 国内自拍视频一区二区三区 | 亚洲欧美视频在线| 亚洲大黄网站| 久久国产精彩视频| 夜夜爽夜夜爽精品视频| 国产在线不卡视频| 欧美日韩在线另类| 久久免费视频在线观看| 亚洲午夜精品一区二区| 欧美成人午夜剧场免费观看| 欧美在线观看日本一区| 日韩一区二区福利| 亚洲大片在线观看| 国产日产欧美一区| 欧美日韩一区二区三区| 美日韩丰满少妇在线观看| 欧美一区二区| 亚洲一区二区三区精品在线 | 蜜臀久久久99精品久久久久久 | 久久网站免费| 中文日韩欧美| 亚洲人永久免费|