関数を指すポインタ  ポインタを指すポインタ

関数を指すポインタ

int abc(int);の関数を指すポインタは、int (*p)(int);と宣言できる。p変数はその関数の形式(戻り値、引数の数と型)が一致すればその関数のアドレスを入れることができる。
b.c---------------------------------------------------------------
#include<stdio.h>
int abc(int x){
       return x+1;
}

int main(void)
{
       int (*p)(int);
       p=abc;
       printf("%d\n",p(1));
       return 0;
}

コンパイルは、gcc b.cやcl b.c
コマンドプロンプト>b.exe
2
Javaや最近はやりのRubyなどは
実行するまでどの関数を処理するかわからない。
実行時に関数を選択するにはこうした関数のアドレスを配列(表)する。関数テーブルを作ることでアセンブリ言語でいうジャンプテーブル(割り込み用の関数テーブルなど)を作ることができる。


ポインタを指すポインタ

int k,*p;
p=&k;
ポインタpを指すポインタppは、int **p=p;
a.c----------------------------------------------------------
#include<stdio.h>
#include<string.h>

main(void){
       int k,*p;
       int **pp;
       k=5;
       p=&k;
       pp=&p;
       printf("%d\n",k);
       printf("%d\n",*p);
       printf("%d\n",**pp);
       ++**pp;
       printf("%d\n",**pp);
}

コンパイルは、gcc a.cとかcl a.c
コマンドプロンプト> a.exe
5
5
5
6

ポインタを指すポインタに対してさらにこれを指すポインタは***jとなるが実際にはつかわない。
「今日の訪問数: -
「昨日の訪問数: -
「今までの訪問数: -
名前:
コメント:
最終更新:2010年01月18日 20:31
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。