関数を指すポインタ
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