2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2017-12-12 関数のポインタの使い方 [長年日記]

/*
  gcc -g func_pointer.c -o func_pointer
*/ 
 
 
#include<stdio.h>
 
typedef void (* FUNC_POINTER)(char *); //関数ポインタのtypedef
 
typedef int (* FUNC_POINTER2)(int, int, int, int); //関数ポインタのtypedef
 
void func1(char *s){
  printf("%s\n",s);
}
 
void func2(char *s){
  int i;
  for(i=0;i<2;i++){
	printf("%s\n",s);
  }
}
 
void func_null(char *s){
}
 
 
void func(char *s,FUNC_POINTER p){
  p(s);
}
 
int shortcut_func1(int a, int b, int c, int d)
{
  return a * b * c * d;
}
 
int shortcut_func2(int a, int b, int c, int d)
{
  return a + b + c + d;
}
 
 
int shortcut_func(int a, int b, int c, int d, FUNC_POINTER2 p2){
  p2(a,b,c,d);
}
 
 
 
 
int main(){
  FUNC_POINTER p;
 
  p = func1;
  func("ありがと",p);
 
  p = func2;
  func("Thanks",p);
 
  p = func_null;
  func("何も出ないよ",p);
 
 
  FUNC_POINTER2 p2;
 
  p2 = shortcut_func1;
  printf("%d\n", shortcut_func(1,2,3,4,p2));
 
  p2 = shortcut_func2;
  printf("%d\n", shortcut_func(1,2,3,4,p2));
 
  return 0;
}
syntax2html